summaryrefslogtreecommitdiffstats
path: root/ocamldoc/odoc_str.ml
diff options
context:
space:
mode:
Diffstat (limited to 'ocamldoc/odoc_str.ml')
-rw-r--r--ocamldoc/odoc_str.ml128
1 files changed, 128 insertions, 0 deletions
diff --git a/ocamldoc/odoc_str.ml b/ocamldoc/odoc_str.ml
new file mode 100644
index 000000000..434ae72f5
--- /dev/null
+++ b/ocamldoc/odoc_str.ml
@@ -0,0 +1,128 @@
+(***********************************************************************)
+(* OCamldoc *)
+(* *)
+(* Maxence Guesdon, projet Cristal, INRIA Rocquencourt *)
+(* *)
+(* Copyright 2001 Institut National de Recherche en Informatique et *)
+(* en Automatique. All rights reserved. This file is distributed *)
+(* under the terms of the Q Public License version 1.0. *)
+(* *)
+(***********************************************************************)
+
+
+(** The functions to get a string from different kinds of elements (types, modules, ...). *)
+
+module Name = Odoc_name
+
+let string_of_type t =
+ let module M = Odoc_type in
+ "type "^
+ (String.concat ""
+ (List.map
+ (fun p -> (Odoc_misc.string_of_type_expr p)^" ")
+ t.M.ty_parameters
+ )
+ )^
+ (Name.simple t.M.ty_name)^" "^
+ (match t.M.ty_manifest with
+ None -> ""
+ | Some typ -> "= "^(Odoc_misc.string_of_type_expr typ)^" "
+ )^
+ (match t.M.ty_kind with
+ M.Type_abstract ->
+ ""
+ | M.Type_variant l ->
+ "=\n"^
+ (String.concat ""
+ (List.map
+ (fun cons ->
+ " | "^cons.M.vc_name^
+ (match cons.M.vc_args with
+ [] -> ""
+ | l ->
+ " of "^(String.concat " * "
+ (List.map (fun t -> "("^(Odoc_misc.string_of_type_expr t)^")") l))
+ )^
+ (match cons.M.vc_text with
+ None ->
+ ""
+ | Some t ->
+ "(* "^(Odoc_misc.string_of_text t)^" *)"
+ )^"\n"
+ )
+ l
+ )
+ )
+ | M.Type_record l ->
+ "= {\n"^
+ (String.concat ""
+ (List.map
+ (fun record ->
+ " "^(if record.M.rf_mutable then "mutable " else "")^
+ record.M.rf_name^" : "^(Odoc_misc.string_of_type_expr record.M.rf_type)^";"^
+ (match record.M.rf_text with
+ None ->
+ ""
+ | Some t ->
+ "(* "^(Odoc_misc.string_of_text t)^" *)"
+ )^"\n"
+ )
+ l
+ )
+ )^
+ "}\n"
+ )^
+ (match t.M.ty_info with
+ None -> ""
+ | Some info -> Odoc_misc.string_of_info info)
+
+let string_of_exception e =
+ let module M = Odoc_exception in
+ "exception "^(Name.simple e.M.ex_name)^
+ (match e.M.ex_args with
+ [] -> ""
+ | _ ->" : "^
+ (String.concat " -> "
+ (List.map (fun t -> "("^(Odoc_misc.string_of_type_expr t)^")") e.M.ex_args)
+ )
+ )^
+ (match e.M.ex_alias with
+ None -> ""
+ | Some ea ->
+ " = "^
+ (match ea.M.ea_ex with
+ None -> ea.M.ea_name
+ | Some e2 -> e2.M.ex_name
+ )
+ )^"\n"^
+ (match e.M.ex_info with
+ None -> ""
+ | Some i -> Odoc_misc.string_of_info i)
+
+let string_of_value v =
+ let module M = Odoc_value in
+ "val "^(Name.simple v.M.val_name)^" : "^
+ (Odoc_misc.string_of_type_expr v.M.val_type)^"\n"^
+ (match v.M.val_info with
+ None -> ""
+ | Some i -> Odoc_misc.string_of_info i)
+
+let string_of_attribute a =
+ let module M = Odoc_value in
+ "val "^
+ (if a.M.att_mutable then Odoc_messages.mutab^" " else "")^
+ (Name.simple a.M.att_value.M.val_name)^" : "^
+ (Odoc_misc.string_of_type_expr a.M.att_value.M.val_type)^"\n"^
+ (match a.M.att_value.M.val_info with
+ None -> ""
+ | Some i -> Odoc_misc.string_of_info i)
+
+let string_of_method m =
+ let module M = Odoc_value in
+ "method "^
+ (if m.M.met_private then Odoc_messages.privat^" " else "")^
+ (Name.simple m.M.met_value.M.val_name)^" : "^
+ (Odoc_misc.string_of_type_expr m.M.met_value.M.val_type)^"\n"^
+ (match m.M.met_value.M.val_info with
+ None -> ""
+ | Some i -> Odoc_misc.string_of_info i)