diff options
Diffstat (limited to 'ocamldoc/odoc_html.ml')
-rw-r--r-- | ocamldoc/odoc_html.ml | 146 |
1 files changed, 87 insertions, 59 deletions
diff --git a/ocamldoc/odoc_html.ml b/ocamldoc/odoc_html.ml index 3b066eb7a..2613e5669 100644 --- a/ocamldoc/odoc_html.ml +++ b/ocamldoc/odoc_html.ml @@ -981,6 +981,23 @@ class html = self#html_of_described_parameter_list module_name m.met_value.val_parameters ) + (** Return HTML code to print the type of the given parameter, + and eventually its label. Note that we must remove + the option constructor if we print an optional argument.*) + method html_of_parameter m p = + let (pi,label) = p in + let (slabel, t) = + let t = Parameter.typ p in + match label with + "" -> ("", t) + | s -> + if s.[0] = '?' then + (s^":", Odoc_info.remove_option t) + else + (s^":", t) + in + slabel^(self#html_of_type_expr m t) + (** Return html code for the description of a function parameter. *) method html_of_parameter_description p = match Parameter.names p with @@ -1224,15 +1241,13 @@ class html = "</pre>\n" (** Return html code for the given [class_kind].*) - method html_of_class_kind father ?(with_def_syntax=true) ckind = + method html_of_class_kind father ckind = print_DEBUG "html#html_of_class_kind"; match ckind with Class_structure _ -> - (if with_def_syntax then " = " else "")^ (self#html_of_code ~with_pre: false Odoc_messages.object_end) | Class_apply capp -> - (if with_def_syntax then " = " else "")^ ( match capp.capp_class with None -> capp.capp_name @@ -1247,7 +1262,6 @@ class html = capp.capp_params_code)) | Class_constr cco -> - (if with_def_syntax then " = " else "")^ ( match cco.cco_type_parameters with [] -> "" @@ -1256,24 +1270,23 @@ class html = ( match cco.cco_class with None -> cco.cco_name - | Some cl -> + | Some (Cl cl) -> let (html_file, _) = Naming.html_files cl.cl_name in "<a href=\""^html_file^"\">"^cl.cl_name^"</a> " + | Some (Cltype (clt,_)) -> + let (html_file, _) = Naming.html_files clt.clt_name in + "<a href=\""^html_file^"\">"^clt.clt_name^"</a> " ) | Class_constraint (ck, ctk) -> - (if with_def_syntax then " = " else "")^ - "( "^(self#html_of_class_kind father ~with_def_syntax: false ck)^ + "( "^(self#html_of_class_kind father ck)^ " : "^ (self#html_of_class_type_kind father ctk)^ " )" (** Return html code for the given [class_type_kind].*) - method html_of_class_type_kind father ?def_syntax ctkind = + method html_of_class_type_kind father ctkind = match ctkind with Class_type cta -> - (match def_syntax with - None -> "" - | Some s -> " "^s^" ")^ ( match cta.cta_type_parameters with [] -> "" @@ -1294,73 +1307,88 @@ class html = "<a href=\""^html_file^"\">"^cl.cl_name^"</a>" ) | Class_signature _ -> - (match def_syntax with - None -> "" - | Some s -> " "^s^" ")^ - (self#html_of_code ~with_pre: false Odoc_messages.object_end) + self#html_of_code ~with_pre: false Odoc_messages.object_end (** Return html code for a class. *) method html_of_class ?(complete=true) ?(with_link=true) c = Odoc_info.reset_type_names (); + let buf = Buffer.create 32 in let (html_file, _) = Naming.html_files c.cl_name in - "<pre>"^(self#keyword "class")^" "^ + let p = Printf.bprintf in + p buf "<pre>%s " (self#keyword "class"); (* we add a html tag, the same as for a type so we can go directly here when the class name is used as a type name *) - "<a name=\""^(Naming.type_target - { ty_name = c.cl_name ; - ty_info = None ; ty_parameters = [] ; - ty_kind = Type_abstract ; ty_manifest = None ; - ty_loc = Odoc_info.dummy_loc })^ - "\"></a>"^ - (print_DEBUG "html#html_of_class : virtual or not" ; "")^ - (if c.cl_virtual then (self#keyword "virtual")^" " else "")^ + p buf "<a name=\"%s\"></a>" + (Naming.type_target + { ty_name = c.cl_name ; + ty_info = None ; ty_parameters = [] ; + ty_kind = Type_abstract ; ty_manifest = None ; + ty_loc = Odoc_info.dummy_loc }); + print_DEBUG "html#html_of_class : virtual or not" ; + if c.cl_virtual then p buf "%s " (self#keyword "virtual") else (); ( match c.cl_type_parameters with - [] -> "" - | l -> "["^(self#html_of_type_expr_list (Name.father c.cl_name) ", " l)^"] " - )^ - (print_DEBUG "html#html_of_class : with link or not" ; "")^ + [] -> () + | l -> + p buf "[%s] " + (self#html_of_type_expr_list (Name.father c.cl_name) ", " l) + ); + print_DEBUG "html#html_of_class : with link or not" ; ( if with_link then - "<a href=\""^html_file^"\">"^(Name.simple c.cl_name)^"</a>" + p buf "<a href=\"%s\">%s</a>" html_file (Name.simple c.cl_name) else - Name.simple c.cl_name - )^ - (match c.cl_parameters with [] -> "" | _ -> " ... ")^ - (print_DEBUG "html#html_of_class : class kind" ; "")^ - (self#html_of_class_kind (Name.father c.cl_name) c.cl_kind)^ - "</pre>"^ - (print_DEBUG "html#html_of_class : info" ; "")^ - ((if complete then self#html_of_info else self#html_of_info_first_sentence) c.cl_info) + p buf "%s" (Name.simple c.cl_name) + ); + + Buffer.add_string buf " : " ; + + List.iter + (fun param -> + p buf "%s -> " (self#html_of_parameter (Name.father c.cl_name) param)) + c.cl_parameters; + + print_DEBUG "html#html_of_class : class kind" ; + Buffer.add_string buf (self#html_of_class_kind (Name.father c.cl_name) c.cl_kind); + Buffer.add_string buf "</pre>" ; + print_DEBUG "html#html_of_class : info" ; + Buffer.add_string buf + ((if complete then self#html_of_info else self#html_of_info_first_sentence) c.cl_info); + Buffer.contents buf (** Return html code for a class type. *) method html_of_class_type ?(complete=true) ?(with_link=true) ct = Odoc_info.reset_type_names (); + let buf = Buffer.create 32 in + let p = Printf.bprintf in let (html_file, _) = Naming.html_files ct.clt_name in - "<pre>"^(self#keyword "class type")^" "^ + p buf "<pre>%s " (self#keyword "class type"); (* we add a html tag, the same as for a type so we can go directly here when the class type name is used as a type name *) - "<a name=\""^(Naming.type_target - { ty_name = ct.clt_name ; - ty_info = None ; ty_parameters = [] ; - ty_kind = Type_abstract ; ty_manifest = None ; - ty_loc = Odoc_info.dummy_loc })^ - "\"></a>"^ - (if ct.clt_virtual then (self#keyword "virtual")^" " else "")^ + p buf "<a name=\"%s\"></a>" + (Naming.type_target + { ty_name = ct.clt_name ; + ty_info = None ; ty_parameters = [] ; + ty_kind = Type_abstract ; ty_manifest = None ; + ty_loc = Odoc_info.dummy_loc }); + if ct.clt_virtual then p buf "%s "(self#keyword "virtual") else (); ( match ct.clt_type_parameters with - [] -> "" - | l -> "["^(self#html_of_type_expr_list (Name.father ct.clt_name) ", " l)^"] " - )^ - ( - if with_link then - "<a href=\""^html_file^"\">"^(Name.simple ct.clt_name)^"</a>" - else - Name.simple ct.clt_name - )^ - (self#html_of_class_type_kind (Name.father ct.clt_name) ~def_syntax: ":" ct.clt_kind)^ - "</pre>"^ - ((if complete then self#html_of_info else self#html_of_info_first_sentence) ct.clt_info) + [] -> () + | l -> p buf "[%s] " (self#html_of_type_expr_list (Name.father ct.clt_name) ", " l) + ); + + if with_link then + p buf "<a href=\"%s\">%s</a>" html_file (Name.simple ct.clt_name) + else + p buf "%s" (Name.simple ct.clt_name); + + Buffer.add_string buf " = "; + Buffer.add_string buf (self#html_of_class_type_kind (Name.father ct.clt_name) ct.clt_kind); + Buffer.add_string buf "</pre>"; + Buffer.add_string buf ((if complete then self#html_of_info else self#html_of_info_first_sentence) ct.clt_info); + + Buffer.contents buf (** Return html code to represent a dag, represented as in Odoc_dag2html. *) method html_of_dag dag = @@ -1505,7 +1533,7 @@ class html = | Class_comment t -> output_string chanout (self#html_of_class_comment t) ) - (Class.class_elements cl); + (Class.class_elements ~trans:false cl); output_string chanout "</html>"; close_out chanout; @@ -1557,7 +1585,7 @@ class html = | Class_comment t -> output_string chanout (self#html_of_class_comment t) ) - (Class.class_type_elements clt); + (Class.class_type_elements ~trans: false clt); output_string chanout "</html>"; close_out chanout; |