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