123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051openPrintftypeinline=[`Textofstring|`Codeofstring]typeblock=[`Paragraphofinlinelist|`Preofstring]typedoc=[`Textofblocklist]letparse_textlocs=try`Text(Atd_doc_lexer.parse_strings:blocklist)withe->failwith(Printf.sprintf"%s:\nInvalid format for doc.text %S:\n%s"(Atd_ast.string_of_locloc)s(Printexc.to_stringe))letget_doclocan:docoption=Atd_annot.get_field(funs->Some(Some(parse_textlocs)))None["doc"]"text"an(* Conversion to HTML *)lethtml_escapebufs=String.iter(function'<'->Buffer.add_stringbuf"<"|'>'->Buffer.add_stringbuf">"|'&'->Buffer.add_stringbuf"&"|'"'->Buffer.add_stringbuf"""|c->Buffer.add_charbufc)sletprint_inlinebuf=function`Texts->html_escapebufs|`Codes->bprintfbuf"<code>%a</code>"html_escapeslethtml_of_doc(`Textblocks)=letbuf=Buffer.create300inbprintfbuf"\n<div class=\"atd-doc\">\n";List.iter(function`Paragraphl->Buffer.add_stringbuf"<p>\n";List.iter(print_inlinebuf)l;Buffer.add_stringbuf"\n</p>\n"|`Pres->Buffer.add_stringbuf"<pre>\n";html_escapebufs;Buffer.add_stringbuf"</pre>\n")blocks;bprintfbuf"\n</div>\n";Buffer.contentsbuf