[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [Xen-API] [PATCH] [ocamldoc] HTML pass-thru in ocamldoc


  • To: Rob Hoes <Rob.Hoes@xxxxxxxxxx>, xen-api <xen-api@xxxxxxxxxxxxxxxxxxx>
  • From: Dave Scott <Dave.Scott@xxxxxxxxxxxxx>
  • Date: Sun, 6 Dec 2009 22:12:29 +0000
  • Accept-language: en-US
  • Acceptlanguage: en-US
  • Cc:
  • Delivery-date: Sun, 06 Dec 2009 14:12:29 -0800
  • List-id: Discussion of API issues surrounding Xen <xen-api.lists.xensource.com>
  • Thread-index: Acp11kyGvIMEuX1mSXOokCYgudN8sQA6tkvg
  • Thread-topic: [Xen-API] [PATCH] [ocamldoc] HTML pass-thru in ocamldoc

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 "&lt;"
> -    | '>' -> Buffer.add_string buf "&gt;"
> -    | '&' -> Buffer.add_string buf "&amp;"
> -    | 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 "&lt;"
> +             | '>' -> Buffer.add_string buf "&gt;"
> +             | '&' -> Buffer.add_string buf "&amp;"
> +             | 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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.