open Simple_markup
open Simple_markup__html
open XHTML.M
open Bitstring
let render_pre ~kind txt =
match kind with
| "html" -> unsafe_data txt
| _ -> pre [code [pcdata txt]]
let render_link href =
a ~a:[a_href (uri_of_string href.href_target)] [pcdata href.href_desc]
let render_img img_ref =
img ~src:(uri_of_string img_ref.img_src) ~alt:img_ref.img_alt ()
let interact () =
let len =
bitmatch (bitstring_of_chan_max stdin 4) with
| { len:4*8 } -> Int32.to_int len in
bitmatch (bitstring_of_chan_max stdin len) with
| { abridge:8 ; input:(len-1)*8:string } ->
let markup = parse_text input in
let html =
to_html
~render_pre:render_pre
~render_link:render_link
~render_img:render_img markup in
let html =
match abridge with
| 0 -> html
| _ -> [List.hd html] in
let html_pretty = Xhtmlpretty.xhtml_list_print html in
let output =
let len = String.length html_pretty in
BITSTRING { (Int32.of_int len):4*8 ; html_pretty:len*8:string } in
Bitstring.bitstring_to_chan output stdout;
flush stdout
let _ =
while true do
interact ()
done