Yep, anything you like... it is just copied straight into the web page. It is
especially useful for things like tables and images, for which OCamlDoc does
not have built-in support. Of course using this restricts your docs to our
custom-generated HTML, while "general" OCamlDoc can be used to generate LaTeX,
man pages etc.
Cheers,
Rob
On 6 Dec 2009, at 22:12, Dave Scott wrote:
> Cool :)
>
> Can the HTML include javascript?
>
> Cheers,
> Dave
>
>> -----Original Message-----
>> From: xen-api-bounces@xxxxxxxxxxxxxxxxxxx [mailto:xen-api-
>> bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of Rob Hoes
>> Sent: 05 December 2009 18:10
>> To: xen-api
>> Subject: [Xen-API] [PATCH] [ocamldoc] HTML pass-thru in ocamldoc
>>
>> # HG changeset patch
>> # User Rob Hoes <rob.hoes@xxxxxxxxxx>
>> [ocamldoc] HTML pass-thru in ocamldoc
>>
>> To include any HTML content in OCamlDoc special comments, place the
>> HTML content inside {html ...}. Example:
>>
>> (** This picture fully describes the module: {html <img
>> src="mymodule.png" alt="MyModule" />} *)
>>
>> Signed-off-by: Rob Hoes <rob.hoes@xxxxxxxxxx>
>>
>> diff -r 9f5b9c98d6ca ocaml/doc/odoc_json.ml
>> --- a/ocaml/doc/odoc_json.ml Fri Dec 04 13:37:13 2009 +0000
>> +++ b/ocaml/doc/odoc_json.ml Sat Dec 05 18:09:33 2009 +0000
>> @@ -186,27 +186,29 @@
>> type html =
>> | Node of string * (string * string) list * html list (** Node ("",_,_)
>> will be discarded *) | Leaf of string
>> +| Raw_html of string
>>
>> let node tag ?(atts=[]) subs = Node (tag, atts, subs)
>>
>> let escape_entities s =
>> - let len = String.length s in
>> - let buf = Buffer.create len in
>> - for i = 0 to len - 1 do
>> - match s.[i] with
>> - '<' -> Buffer.add_string buf "<"
>> - | '>' -> Buffer.add_string buf ">"
>> - | '&' -> Buffer.add_string buf "&"
>> - | c -> Buffer.add_char buf c
>> - done;
>> - Buffer.contents buf
>> + let len = String.length s in
>> + let buf = Buffer.create len in
>> + for i = 0 to len - 1 do
>> + match s.[i] with
>> + | '<' -> Buffer.add_string buf "<"
>> + | '>' -> Buffer.add_string buf ">"
>> + | '&' -> Buffer.add_string buf "&"
>> + | c -> Buffer.add_char buf c
>> + done;
>> + Buffer.contents buf
>>
>> let string_of_bool b = if b then "true" else "false"
>>
>> let rec print_one_t = function
>> -| Leaf s -> (escape_entities s)
>> -| Node ("",_,_) -> ""
>> -| Node (tag,atts,subs) ->
>> +| Leaf s -> escape_entities s
>> +| Raw_html s -> s
>> +| Node ("", _, _) -> ""
>> +| Node (tag, atts, subs) ->
>> "<" ^ tag ^
>> (match atts with
>> | [] -> ""
>> @@ -219,6 +221,9 @@
>>
>> and print_t_list l =
>> String.concat "" (List.map print_one_t l)
>> +
>> +let html_to_json l =
>> + String (print_t_list l)
>>
>> (* the actual generator class *)
>>
>> @@ -237,11 +242,13 @@
>>
>> method t_of_text = List.map self#t_of_text_element
>>
>> + method t_of_raw s = Leaf (remove_asterisks s)
>> +
>> method t_of_text_element = function
>> - | Odoc_info.Raw s -> Leaf (remove_asterisks s)
>> - | Odoc_info.Code s -> node "tt" [Leaf (remove_asterisks s)]
>> - | Odoc_info.CodePre s -> node "span" ~atts:["class", "codepre"]
>> [Leaf (remove_asterisks s)]
>> - | Odoc_info.Verbatim s -> node "span" ~atts:["class", "verbatim"]
>> [Leaf (remove_asterisks s)]
>> + | Odoc_info.Raw s -> self#t_of_raw s
>> + | Odoc_info.Code s -> node "span" ~atts:["class", "code"]
>> [self#t_of_raw s]
>> + | Odoc_info.CodePre s -> node "span" ~atts:["class", "codepre"]
>> [self#t_of_raw s]
>> + | Odoc_info.Verbatim s -> node "span" ~atts:["class", "verbatim"]
>> +[self#t_of_raw s]
>> | Odoc_info.Bold t -> node "b" (self#t_of_text t)
>> | Odoc_info.Italic t -> node "i" (self#t_of_text t)
>> | Odoc_info.Emphasize t -> node "em" (self#t_of_text t) @@ -
>> 255,14 +262,18 @@
>> | Odoc_info.Title (n, l_opt, t) ->
>> (* (match l_opt with None -> [] | Some t -> ["name",t])
>> *)
>> node ("h" ^ string_of_int n) (self#t_of_text t)
>> - | Odoc_info.Latex s -> node "span" ~atts:["class", "latex"] [Leaf
>> (remove_asterisks s)]
>> + | Odoc_info.Latex s -> node "span" ~atts:["class", "latex"]
>> +[self#t_of_raw s]
>> | Odoc_info.Link (s, t) -> node "a" ~atts: ["href", s]
>> (self#t_of_text t)
>> | Odoc_info.Ref (name, ref_opt) -> self#t_of_Ref name ref_opt
>> | Odoc_info.Superscript t -> node "sup" (self#t_of_text t)
>> | Odoc_info.Subscript t -> node "sub" (self#t_of_text t)
>> | Odoc_info.Module_list l -> Leaf "" (* self#json_of_Module_list
>> l *)
>> | Odoc_info.Index_list -> Leaf "" (* node "index_list" [] *)
>> - | Odoc_info.Custom (s,t) -> Leaf "" (* node "custom" ~atts:
>> ["name", s] (self#t_of_text t) *)
>> + | Odoc_info.Custom (s,t) ->
>> + if s = "{html" then
>> + Raw_html (String.concat "" (List.map (fun
>> (Odoc_info.Raw s) -> remove_asterisks s) t))
>> + else
>> + node "div" ~atts:["class", s] (self#t_of_text t)
>>
>> method t_of_Ref name ref_opt =
>> let code = node "span" ~atts:["class", "code"] [Leaf name]
>> in @@ -375,7 +386,7 @@
>> Object (name :: info :: kind @ [])
>>
>> method json_of_comment t =
>> - String (print_t_list (self#t_of_text t))
>> + html_to_json (self#t_of_text t)
>>
>> method json_of_type t =
>> let name = "name", String t.Type.ty_name in @@ -416,7
>> +427,7 @@
>> | None -> []
>> | Some t ->
>> completed_descr_cnt <- completed_descr_cnt + 1;
>> - ["description", String (print_t_list (self#t_of_text
>> t))]
>> + ["description", html_to_json (self#t_of_text t)]
>> in
>> descr_cnt <- descr_cnt + 1;
>> Object (["name", String c.Type.vc_name] @ desc @ ["type",
>> Array (List.map self#json_of_type_expr c.Type.vc_args)]) @@ -426,7
>> +437,7 @@
>> | None -> []
>> | Some t ->
>> completed_descr_cnt <- completed_descr_cnt + 1;
>> - ["description", String (print_t_list (self#t_of_text
>> t))]
>> + ["description", html_to_json (self#t_of_text t)]
>> in
>> descr_cnt <- descr_cnt + 1;
>> Object (["name", String f.Type.rf_name; "mutable",
>> json_of_bool f.Type.rf_mutable] @ @@ -443,7 +454,7 @@
>> | None -> []
>> | Some t ->
>> completed_descr_cnt <- completed_descr_cnt + 1;
>> - ["description", String (print_t_list (self#t_of_text
>> t))]
>> + ["description", html_to_json (self#t_of_text t)]
>> in
>> let authors = match List.map (fun s -> String s)
>> i.i_authors with
>> | [] -> []
>> @@ -461,7 +472,7 @@
>> in
>> let dep = match i.i_deprecated with
>> | None -> []
>> - | Some t -> ["deprecated", String (print_t_list
>> (self#t_of_text t))]
>> + | Some t -> ["deprecated", html_to_json (self#t_of_text t)]
>> in
>> let params = [] in
>> let raised = match List.map self#json_of_raised_exception
>> i.i_raised_exceptions with @@ -470,18 +481,18 @@
>> in
>> let return_v = match i.i_return_value with
>> | None -> []
>> - | Some t -> ["return", String (print_t_list (self#t_of_text
>> t))]
>> + | Some t -> ["return", html_to_json (self#t_of_text t)]
>> in
>> - let customs = List.map (fun (tag, t) -> tag, String
>> (print_t_list (self#t_of_text t))) i.i_custom in
>> + let customs = List.map (fun (tag, t) -> tag, html_to_json
>> +(self#t_of_text t)) i.i_custom in
>> Object (desc @ authors @ version @ see @ since @ dep @
>> params @ raised @ return_v @ customs)
>>
>> method json_of_see = function
>> - | (See_url s, t) -> Object ["url", String s; "text", String
>> (print_t_list (self#t_of_text t))]
>> - | (See_file s, t) -> Object ["file", String s; "text", String
>> (print_t_list (self#t_of_text t))]
>> - | (See_doc s, t) -> Object ["doc", String s; "text", String
>> (print_t_list (self#t_of_text t))]
>> + | (See_url s, t) -> Object ["url", String s; "text", html_to_json
>> (self#t_of_text t)]
>> + | (See_file s, t) -> Object ["file", String s; "text",
>> html_to_json (self#t_of_text t)]
>> + | (See_doc s, t) -> Object ["doc", String s; "text", html_to_json
>> +(self#t_of_text t)]
>>
>> method json_of_raised_exception (s, t) =
>> - Object ["raised_exception", String s; "text", String
>> (print_t_list (self#t_of_text t))]
>> + Object ["raised_exception", String s; "text", html_to_json
>> +(self#t_of_text t)]
>>
>> method json_of_module m =
>> let name = "name", String m.Module.m_name in diff -r
>> 9f5b9c98d6ca ocaml/doc/style.css
>> --- a/ocaml/doc/style.css Fri Dec 04 13:37:13 2009 +0000
>> +++ b/ocaml/doc/style.css Sat Dec 05 18:09:33 2009 +0000
>> @@ -263,8 +263,9 @@
>> }
>>
>> .arrow {
>> - font-size: 2em;
>> + font-size: 150%;
>> color: #cc6600;
>> + padding: 0 3px;
>> }
>>
>> .optional {
>> diff -r 9f5b9c98d6ca ocaml/xapi/xapi_vlan.mli
>> --- a/ocaml/xapi/xapi_vlan.mli Fri Dec 04 13:37:13 2009 +0000
>> +++ b/ocaml/xapi/xapi_vlan.mli Sat Dec 05 18:09:33 2009 +0000
>> @@ -16,7 +16,7 @@
>> *)
>>
>> (**
>> -Xapi also supports 802.1Q VLANs, which are used to separate network
>> traffic by inserting a _tag_ in each packet, thereby creating multiple
>> virtual networks. A tag is simply a number.
>> +Xapi also supports 802.1Q VLANs, which are used to separate network
>> traffic by inserting a {i tag} in each packet, thereby creating
>> multiple virtual networks. A tag is simply a number.
>> {ul
>> {- A VLAN has a {i VLAN} object in the datamodel, which is associated
>> with a {i slave} PIF and a {i master} PIF.}
>> {- The VLAN slave, or untagged PIF, is used as the base of the VLAN.
>> It can be any existing PIF (including bond masters).}
_______________________________________________
xen-api mailing list
xen-api@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/mailman/listinfo/xen-api
|