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
|