Setup


In [1]:
module Tyxml_html = Html5
module Html5 = Html5.M


Out[1]:
module Tyxml_html = Html5
Out[1]:
module Html5 = Html5.M

Display output as html


In [2]:
let string_of_html h = 
    let b = Buffer.create 16 in
    Tyxml_html.P.print_list ~output:(Buffer.add_string b) h;
    Buffer.contents b
let html x = Iocaml.display "text/html" (string_of_html x)


Out[2]:
val string_of_html : 'a Tyxml_html.M.elt list -> string = <fun>
Out[2]:
val html : 'a Tyxml_html.M.elt list -> unit = <fun>

Examples using syntax extension


In [3]:
html <:html5list< <b>Hello <i>world</i></b> >>


Hello world
Out[3]:
- : unit = <unknown constructor>

In [4]:
html <:html5list<
    <table>
        <tr>
            <td>a</td>
            <td>b</td>
        </tr>
        <tr>
            <td>c</td>
            <td>d</td>
        </tr>
    </table>
>>


a b
c d
Out[4]:
- : unit = <unknown constructor>

Using anti-quotations


In [5]:
let table f x = 
    let row = List.map (fun x -> <:html5< <td>$str:f x$</td> >>) in
    let rows = List.map (fun x -> <:html5< <tr>$list:row x$</tr> >>) in
    <:html5< <table>$list:rows x$</table> >>


Out[5]:
val table :
  ('a -> string Html5.Xml.wrap) ->
  'a list list -> [> Html5_types.table ] Html5.elt = <fun>

In [6]:
html [table string_of_int 
    [ [0;1;2]; 
      [3;4;5]; 
    ] 
]


012
345
Out[6]:
- : unit = <unknown constructor>

SVG output


In [7]:
module Tyxml_svg = Svg
module Svg = Svg.M


Out[7]:
module Tyxml_svg = Svg
Out[7]:
module Svg = Svg.M

In [8]:
let string_of_svg h = 
    let b = Buffer.create 16 in
    Tyxml_svg.P.print_list ~output:(Buffer.add_string b) h;
    Buffer.contents b
let svg x = Iocaml.display "text/html" (string_of_svg x)


Out[8]:
val string_of_svg : 'a Tyxml_svg.M.elt list -> string = <fun>
Out[8]:
val svg : 'a Tyxml_svg.M.elt list -> unit = <fun>

In [9]:
svg <:svglist< <svg width="100" height="100"><circle r="40" cx="50" cy="50" /></svg> >>


Out[9]:
- : unit = <unknown constructor>