Sophie

Sophie

distrib > Mageia > 4 > x86_64 > by-pkgid > 7a036e8af259cd957ff83cd3d8293b72 > files > 16

ocaml-textile-devel-0.10-2.mga4.x86_64.rpm

<html><head>
<link rel="stylesheet" href="style.css" type="text/css">
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
<link rel="Start" href="index.html">
<link title="Index of types" rel=Appendix href="index_types.html">
<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
<link title="Index of values" rel=Appendix href="index_values.html">
<link title="Index of modules" rel=Appendix href="index_modules.html">
<link title="Textile" rel="Chapter" href="Textile.html">
<link title="Textile_parser" rel="Chapter" href="Textile_parser.html">
<link title="Textile_html" rel="Chapter" href="Textile_html.html"><title>Textile_html</title>
</head>
<body>
<code class="code"><span class="comment">(*&nbsp;This&nbsp;file&nbsp;is&nbsp;part&nbsp;of&nbsp;textile-ocaml.<br>
&nbsp;*<br>
&nbsp;*&nbsp;textile-ocaml&nbsp;is&nbsp;free&nbsp;software:&nbsp;you&nbsp;can&nbsp;redistribute&nbsp;it&nbsp;and/or&nbsp;modify<br>
&nbsp;*&nbsp;it&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License&nbsp;as&nbsp;published&nbsp;by<br>
&nbsp;*&nbsp;the&nbsp;Free&nbsp;Software&nbsp;Foundation,&nbsp;either&nbsp;version&nbsp;3&nbsp;of&nbsp;the&nbsp;License,&nbsp;or<br>
&nbsp;*&nbsp;(at&nbsp;your&nbsp;option)&nbsp;any&nbsp;later&nbsp;version.<br>
&nbsp;*<br>
&nbsp;*&nbsp;textile-ocaml&nbsp;is&nbsp;distributed&nbsp;in&nbsp;the&nbsp;hope&nbsp;that&nbsp;it&nbsp;will&nbsp;be&nbsp;useful,<br>
&nbsp;*&nbsp;but&nbsp;WITHOUT&nbsp;ANY&nbsp;WARRANTY;&nbsp;without&nbsp;even&nbsp;the&nbsp;implied&nbsp;warranty&nbsp;of<br>
&nbsp;*&nbsp;MERCHANTABILITY&nbsp;or&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE.&nbsp;&nbsp;See&nbsp;the<br>
&nbsp;*&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License&nbsp;for&nbsp;more&nbsp;details.<br>
&nbsp;*<br>
&nbsp;*&nbsp;You&nbsp;should&nbsp;have&nbsp;received&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License<br>
&nbsp;*&nbsp;along&nbsp;with&nbsp;textile-ocaml.&nbsp;&nbsp;If&nbsp;not,&nbsp;see&nbsp;&lt;http://www.gnu.org/licenses/&gt;.<br>
&nbsp;*<br>
&nbsp;*&nbsp;Copyright&nbsp;2011&nbsp;Alexander&nbsp;Markov&nbsp;*)</span><br>
<br>
<span class="keyword">open</span>&nbsp;<span class="constructor">Printf</span><br>
<span class="keyword">open</span>&nbsp;<span class="constructor">Textile</span><br>
<br>
<span class="keyword">exception</span>&nbsp;<span class="constructor">Invalid_textile</span>&nbsp;<span class="keyword">of</span>&nbsp;string<br>
<br>
<span class="keyword">let</span>&nbsp;of_block&nbsp;?(escape_cdata=<span class="keyword">false</span>)&nbsp;?(escape_nott=<span class="keyword">false</span>)&nbsp;block&nbsp;=<br>
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;esc&nbsp;s&nbsp;=<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;strlen&nbsp;=&nbsp;<span class="constructor">String</span>.length&nbsp;s&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;buf&nbsp;=&nbsp;<span class="constructor">Buffer</span>.create&nbsp;strlen&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;f&nbsp;=&nbsp;<span class="keyword">function</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="string">'&amp;'</span>&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Buffer</span>.add_string&nbsp;buf&nbsp;<span class="string">"&amp;amp;"</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="string">'&lt;'</span>&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Buffer</span>.add_string&nbsp;buf&nbsp;<span class="string">"&amp;lt;"</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="string">'&gt;'</span>&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Buffer</span>.add_string&nbsp;buf&nbsp;<span class="string">"&amp;gt;"</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="string">'"'</span>&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Buffer</span>.add_string&nbsp;buf&nbsp;<span class="string">"&amp;quot;"</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;&nbsp;c&nbsp;&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Buffer</span>.add_char&nbsp;buf&nbsp;c&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">String</span>.iter&nbsp;f&nbsp;s;<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Buffer</span>.contents&nbsp;buf&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;dont_esc&nbsp;s&nbsp;=&nbsp;s&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;print_cdata&nbsp;=&nbsp;<span class="keyword">if</span>&nbsp;escape_cdata&nbsp;<span class="keyword">then</span>&nbsp;esc&nbsp;<span class="keyword">else</span>&nbsp;dont_esc&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;print_nott&nbsp;&nbsp;=&nbsp;<span class="keyword">if</span>&nbsp;escape_nott&nbsp;&nbsp;<span class="keyword">then</span>&nbsp;esc&nbsp;<span class="keyword">else</span>&nbsp;dont_esc&nbsp;<span class="keyword">in</span><br>
<br>
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;parse_attr&nbsp;=&nbsp;<span class="keyword">function</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Class</span>&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;sprintf&nbsp;<span class="string">"class=\"%s\""</span>&nbsp;(esc&nbsp;s)<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Id</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;sprintf&nbsp;<span class="string">"id=\"%s\""</span>&nbsp;&nbsp;&nbsp;&nbsp;(esc&nbsp;s)<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Style</span>&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;sprintf&nbsp;<span class="string">"style=\"%s\""</span>&nbsp;(esc&nbsp;s)<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Language</span>&nbsp;s&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;sprintf&nbsp;<span class="string">"lang=\"%s\""</span>&nbsp;&nbsp;(esc&nbsp;s)&nbsp;<span class="keyword">in</span><br>
<br>
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;parse_attrs&nbsp;=&nbsp;<span class="keyword">function</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;[]&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="string">""</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;attrs&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;buf&nbsp;=&nbsp;<span class="constructor">Buffer</span>.create&nbsp;80&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">List</span>.iter&nbsp;(<span class="keyword">fun</span>&nbsp;attr&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Buffer</span>.add_char&nbsp;buf&nbsp;<span class="string">'&nbsp;'</span>;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Buffer</span>.add_string&nbsp;buf&nbsp;(parse_attr&nbsp;attr))&nbsp;attrs;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Buffer</span>.contents&nbsp;buf&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;pa&nbsp;=&nbsp;parse_attrs&nbsp;<span class="keyword">in</span><br>
<br>
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;<span class="keyword">rec</span>&nbsp;parse_phrase&nbsp;=<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;p&nbsp;=&nbsp;sprintf&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;pl&nbsp;=&nbsp;parse_line&nbsp;<span class="keyword">in</span>&nbsp;<span class="keyword">function</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">CData</span>&nbsp;str&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(print_cdata&nbsp;str)<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Strong</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(a,l)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;p&nbsp;<span class="string">"&lt;strong%s&gt;%s&lt;/strong&gt;"</span>&nbsp;(pa&nbsp;a)&nbsp;(pl&nbsp;l)<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Italic</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(a,l)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;p&nbsp;<span class="string">"&lt;i%s&gt;%s&lt;/i&gt;"</span>&nbsp;(pa&nbsp;a)&nbsp;(pl&nbsp;l)<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Bold</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(a,l)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;p&nbsp;<span class="string">"&lt;b%s&gt;%s&lt;/b&gt;"</span>&nbsp;(pa&nbsp;a)&nbsp;(pl&nbsp;l)<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Emphasis</span>&nbsp;&nbsp;&nbsp;&nbsp;(a,l)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;p&nbsp;<span class="string">"&lt;em%s&gt;%s&lt;/em&gt;"</span>&nbsp;(pa&nbsp;a)&nbsp;(pl&nbsp;l)<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Citation</span>&nbsp;&nbsp;&nbsp;&nbsp;(a,l)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;p&nbsp;<span class="string">"&lt;cite%s&gt;%s&lt;/cite&gt;"</span>&nbsp;(pa&nbsp;a)&nbsp;(pl&nbsp;l)<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Deleted</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(a,l)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;p&nbsp;<span class="string">"&lt;del%s&gt;%s&lt;/del&gt;"</span>&nbsp;(pa&nbsp;a)&nbsp;(pl&nbsp;l)<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Inserted</span>&nbsp;&nbsp;&nbsp;&nbsp;(a,l)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;p&nbsp;<span class="string">"&lt;ins%s&gt;%s&lt;/ins&gt;"</span>&nbsp;(pa&nbsp;a)&nbsp;(pl&nbsp;l)<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Superscript</span>&nbsp;(a,l)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;p&nbsp;<span class="string">"&lt;sup%s&gt;%s&lt;/sup&gt;"</span>&nbsp;(pa&nbsp;a)&nbsp;(pl&nbsp;l)<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Subscript</span>&nbsp;&nbsp;&nbsp;(a,l)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;p&nbsp;<span class="string">"&lt;sub%s&gt;%s&lt;/sub&gt;"</span>&nbsp;(pa&nbsp;a)&nbsp;(pl&nbsp;l)<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Span</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(a,l)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;p&nbsp;<span class="string">"&lt;span%s&gt;%s&lt;/span&gt;"</span>&nbsp;(pa&nbsp;a)&nbsp;(pl&nbsp;l)<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Code</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(a,s)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;p&nbsp;<span class="string">"&lt;code%s&gt;%s&lt;/code&gt;"</span>&nbsp;(pa&nbsp;a)&nbsp;(esc&nbsp;s)<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Notextile</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;p&nbsp;<span class="string">"%s"</span>&nbsp;(print_nott&nbsp;s)<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Acronym</span>&nbsp;(a,&nbsp;b)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;<span class="string">"&lt;acronym&nbsp;title=\"%s\"&gt;%s&lt;/acronym&gt;"</span>&nbsp;(esc&nbsp;b)&nbsp;(print_cdata&nbsp;a)<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Image</span>&nbsp;(a,&nbsp;float,&nbsp;src,&nbsp;alt)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keyword">let</span>&nbsp;alt&nbsp;=&nbsp;<span class="keyword">match</span>&nbsp;alt&nbsp;<span class="keyword">with</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Some</span>&nbsp;s&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keyword">let</span>&nbsp;s&nbsp;=&nbsp;esc&nbsp;s&nbsp;<span class="keyword">in</span>&nbsp;p&nbsp;<span class="string">"alt=\"%s\"&nbsp;title=\"%s\""</span>&nbsp;s&nbsp;s<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">None</span>&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="string">"alt=\"\""</span>&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;float&nbsp;=&nbsp;<span class="keyword">match</span>&nbsp;float&nbsp;<span class="keyword">with</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Some</span>&nbsp;<span class="constructor">Float_left</span>&nbsp;&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="string">"&nbsp;style=\"float:&nbsp;left\""</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Some</span>&nbsp;<span class="constructor">Float_right</span>&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="string">"&nbsp;style=\"float:&nbsp;right\""</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">None</span>&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="string">""</span>&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;<span class="string">"&lt;img&nbsp;%s&nbsp;src=\"%s\"%s%s&nbsp;/&gt;"</span>&nbsp;alt&nbsp;(esc&nbsp;src)&nbsp;(pa&nbsp;a)&nbsp;float)<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Link</span>&nbsp;((attrs,&nbsp;l),&nbsp;title,&nbsp;url)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keyword">let</span>&nbsp;title&nbsp;=&nbsp;<span class="keyword">match</span>&nbsp;title&nbsp;<span class="keyword">with</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Some</span>&nbsp;s&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;sprintf&nbsp;<span class="string">"&nbsp;title=%S"</span>&nbsp;(esc&nbsp;s)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">None</span>&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="string">""</span>&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;<span class="string">"&lt;a%s&nbsp;href=\"%s\"%s&gt;%s&lt;/a&gt;"</span>&nbsp;title&nbsp;(esc&nbsp;url)&nbsp;(pa&nbsp;attrs)&nbsp;(pl&nbsp;l))<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Reference</span>&nbsp;i&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;<span class="string">"&lt;sup&nbsp;class=\"footnote\"&gt;&lt;a&nbsp;id=\"ref%d\"&nbsp;href=\"#fn%d\"&gt;%d&lt;/a&gt;&lt;/sup&gt;"</span>&nbsp;i&nbsp;i&nbsp;i<br>
<br>
&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;parse_line&nbsp;line&nbsp;=<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">String</span>.concat&nbsp;<span class="string">""</span>&nbsp;(<span class="constructor">List</span>.map&nbsp;parse_phrase&nbsp;line)&nbsp;<span class="keyword">in</span><br>
<br>
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;parse_lines&nbsp;lines&nbsp;=<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">String</span>.concat&nbsp;<span class="string">"&lt;br&nbsp;/&gt;"</span>&nbsp;(<span class="constructor">List</span>.map&nbsp;parse_line&nbsp;lines)&nbsp;<span class="keyword">in</span><br>
<br>
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;to_lines&nbsp;print&nbsp;strings&nbsp;=<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">String</span>.concat&nbsp;<span class="string">"\n"</span>&nbsp;(<span class="constructor">List</span>.map&nbsp;print&nbsp;strings)&nbsp;<span class="keyword">in</span><br>
<br>
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;parse_talign&nbsp;=&nbsp;<span class="keyword">function</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Some</span>&nbsp;talign&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keyword">let</span>&nbsp;s&nbsp;=&nbsp;<span class="keyword">match</span>&nbsp;talign&nbsp;<span class="keyword">with</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Right</span>&nbsp;&nbsp;&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="string">"right"</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Left</span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="string">"left"</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Center</span>&nbsp;&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="string">"center"</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Justify</span>&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="string">"justify"</span>&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf&nbsp;<span class="string">"&nbsp;style=\"text-align:%s\""</span>&nbsp;s)<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">None</span>&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="string">""</span>&nbsp;<span class="keyword">in</span><br>
<br>
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;parse_padding&nbsp;=&nbsp;<span class="keyword">function</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;0,&nbsp;0&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="string">""</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;l,&nbsp;0&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf&nbsp;<span class="string">"&nbsp;style=\"padding-left:%uem\""</span>&nbsp;l<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;0,&nbsp;r&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf&nbsp;<span class="string">"&nbsp;style=\"padding-right:%uem\""</span>&nbsp;r<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;l,&nbsp;r&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf&nbsp;<span class="string">"&nbsp;style=\"padding-left:%uem;&nbsp;padding-right:%uem\""</span>&nbsp;l&nbsp;r&nbsp;<span class="keyword">in</span><br>
<br>
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;parse_options&nbsp;(attrs,&nbsp;talign,&nbsp;padding)&nbsp;=<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">String</span>.concat&nbsp;<span class="string">""</span>&nbsp;[parse_attrs&nbsp;attrs;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parse_talign&nbsp;talign;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parse_padding&nbsp;padding]&nbsp;<span class="keyword">in</span><br>
<br>
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;parse_valign&nbsp;=&nbsp;<span class="keyword">function</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Some</span>&nbsp;x&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keyword">let</span>&nbsp;s&nbsp;=&nbsp;<span class="keyword">match</span>&nbsp;x&nbsp;<span class="keyword">with</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Top</span>&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="string">"top"</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Middle</span>&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="string">"middle"</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Bottom</span>&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="string">"bottom"</span>&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf&nbsp;<span class="string">"&nbsp;style=\"vertical-align:%s\""</span>&nbsp;s)<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">None</span>&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="string">""</span>&nbsp;<span class="keyword">in</span><br>
<br>
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;parse_tableoptions&nbsp;(opts,&nbsp;valign)&nbsp;=<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">String</span>.concat&nbsp;<span class="string">""</span>&nbsp;[parse_options&nbsp;opts;&nbsp;parse_valign&nbsp;valign]&nbsp;<span class="keyword">in</span><br>
<br>
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;po&nbsp;=&nbsp;parse_options&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;pt&nbsp;=&nbsp;parse_tableoptions&nbsp;<span class="keyword">in</span><br>
<br>
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;parse_cells&nbsp;(cells&nbsp;:&nbsp;cell&nbsp;list)&nbsp;=<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">String</span>.concat&nbsp;<span class="string">""</span>&nbsp;(<span class="constructor">List</span>.map&nbsp;(<span class="keyword">fun</span>&nbsp;((celltype,&nbsp;topts,&nbsp;(colspan,&nbsp;rowspan)),&nbsp;lines)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;tag&nbsp;=<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">match</span>&nbsp;celltype&nbsp;<span class="keyword">with</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Data</span>&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="string">"td"</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Head</span>&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="string">"th"</span>&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;rowspan&nbsp;=<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">match</span>&nbsp;rowspan&nbsp;<span class="keyword">with</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Some</span>&nbsp;rowspan&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;sprintf&nbsp;<span class="string">"&nbsp;rowspan=\"%d\""</span>&nbsp;rowspan<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">None</span>&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="string">""</span>&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;colspan&nbsp;=<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">match</span>&nbsp;colspan&nbsp;<span class="keyword">with</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Some</span>&nbsp;colspan&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;sprintf&nbsp;<span class="string">"&nbsp;colspan=\"%d\""</span>&nbsp;colspan<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">None</span>&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="string">""</span>&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;topts&nbsp;=&nbsp;pt&nbsp;topts&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;attrs&nbsp;=&nbsp;<span class="constructor">String</span>.concat&nbsp;<span class="string">""</span>&nbsp;[topts;&nbsp;rowspan;&nbsp;colspan]&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf&nbsp;<span class="string">"&lt;%s%s&gt;%s&lt;/%s&gt;"</span>&nbsp;tag&nbsp;attrs&nbsp;(parse_lines&nbsp;lines)&nbsp;tag)&nbsp;cells)&nbsp;<span class="keyword">in</span><br>
<br>
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;parse_rows&nbsp;(rows&nbsp;:&nbsp;<span class="constructor">Textile</span>.row&nbsp;list)&nbsp;=<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">String</span>.concat&nbsp;<span class="string">""</span>&nbsp;(<span class="constructor">List</span>.map&nbsp;(<span class="keyword">fun</span>&nbsp;(topts,&nbsp;cells)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf&nbsp;<span class="string">"&lt;tr%s&gt;%s&lt;/tr&gt;"</span>&nbsp;(pt&nbsp;topts)&nbsp;(parse_cells&nbsp;cells))&nbsp;rows)&nbsp;<span class="keyword">in</span><br>
<br>
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;parse_list&nbsp;f&nbsp;=<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;<span class="keyword">rec</span>&nbsp;fill_lvl&nbsp;filled_lvl&nbsp;prev&nbsp;acc&nbsp;=<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">function</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;(lvl,&nbsp;line)&nbsp;::&nbsp;t&nbsp;<span class="keyword">when</span>&nbsp;lvl&nbsp;=&nbsp;filled_lvl&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fill_lvl&nbsp;filled_lvl&nbsp;(parse_line&nbsp;line)&nbsp;(sprintf&nbsp;<span class="string">"%s&lt;li&gt;%s&lt;/li&gt;"</span>&nbsp;acc&nbsp;prev)&nbsp;t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;(lvl,&nbsp;line)&nbsp;::&nbsp;t&nbsp;<span class="keyword">when</span>&nbsp;lvl&nbsp;=&nbsp;filled_lvl&nbsp;+&nbsp;1&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;first&nbsp;=&nbsp;parse_line&nbsp;line&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;lis,&nbsp;rest&nbsp;=&nbsp;fill_lvl&nbsp;lvl&nbsp;first&nbsp;<span class="string">""</span>&nbsp;t&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fill_lvl&nbsp;filled_lvl&nbsp;(prev&nbsp;^&nbsp;(f&nbsp;lis))&nbsp;acc&nbsp;rest<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;((lvl,&nbsp;_)&nbsp;::&nbsp;t)&nbsp;<span class="keyword">as</span>&nbsp;l&nbsp;<span class="keyword">when</span>&nbsp;lvl&nbsp;&lt;&nbsp;filled_lvl&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf&nbsp;<span class="string">"%s&lt;li&gt;%s&lt;/li&gt;"</span>&nbsp;acc&nbsp;prev,&nbsp;l<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;[]&nbsp;<span class="keyword">as</span>&nbsp;l&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf&nbsp;<span class="string">"%s&lt;li&gt;%s&lt;/li&gt;"</span>&nbsp;acc&nbsp;prev,&nbsp;l<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;(lvl,&nbsp;_)&nbsp;::&nbsp;_&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;raise&nbsp;(<span class="constructor">Invalid_textile</span>&nbsp;(<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf&nbsp;<span class="string">"strange&nbsp;bull-&nbsp;or&nbsp;numlist:&nbsp;filled&nbsp;level&nbsp;is&nbsp;%d,&nbsp;but&nbsp;the&nbsp;next&nbsp;element&nbsp;has&nbsp;level&nbsp;%d"</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filled_lvl&nbsp;lvl))&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">function</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;[]&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;raise&nbsp;(<span class="constructor">Invalid_textile</span>&nbsp;<span class="string">"empty&nbsp;bull-&nbsp;or&nbsp;numlist"</span>)<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;(1,&nbsp;line)::t&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;first&nbsp;=&nbsp;parse_line&nbsp;line&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;lis,&nbsp;_&nbsp;=&nbsp;fill_lvl&nbsp;1&nbsp;first&nbsp;<span class="string">""</span>&nbsp;t&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f&nbsp;lis<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;_&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;raise&nbsp;(<span class="constructor">Invalid_textile</span>&nbsp;<span class="string">"strange&nbsp;bull-&nbsp;or&nbsp;numlist"</span>)&nbsp;<span class="keyword">in</span><br>
<br>
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;pl&nbsp;=&nbsp;parse_lines&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;<span class="keyword">match</span>&nbsp;block&nbsp;<span class="keyword">with</span><br>
&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Header</span>&nbsp;(i,&nbsp;(opts,&nbsp;lines))&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf&nbsp;<span class="string">"&lt;h%d%s&gt;%s&lt;/h%d&gt;"</span>&nbsp;i&nbsp;(po&nbsp;opts)&nbsp;(pl&nbsp;lines)&nbsp;i<br>
&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Blockquote</span>&nbsp;(opts,&nbsp;lines)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;popts&nbsp;=&nbsp;po&nbsp;opts&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf&nbsp;<span class="string">"&lt;blockquote%s&gt;&lt;p%s&gt;%s&lt;/p&gt;&lt;/blockquote&gt;"</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;popts&nbsp;popts&nbsp;(pl&nbsp;lines)<br>
&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Footnote</span>&nbsp;(i,&nbsp;(opts,&nbsp;lines))&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf&nbsp;<span class="string">"&lt;p&nbsp;id=\"fn%d\"&nbsp;class=\"footnote\"%s&gt;&lt;sup&gt;%d&lt;/sup&gt;&nbsp;&lt;a&nbsp;href=\"#ref%d\"&gt;↑&lt;/a&gt;&nbsp;%s&lt;/p&gt;"</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;(po&nbsp;opts)&nbsp;i&nbsp;i&nbsp;(pl&nbsp;lines)<br>
&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Paragraph</span>&nbsp;(opts,&nbsp;lines)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf&nbsp;<span class="string">"&lt;p%s&gt;%s&lt;/p&gt;"</span>&nbsp;(po&nbsp;opts)&nbsp;(pl&nbsp;lines)<br>
&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Blockcode</span>&nbsp;(opts,&nbsp;strings)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;popts&nbsp;=&nbsp;po&nbsp;opts&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf&nbsp;<span class="string">"&lt;pre%s&nbsp;class=\"blockcode\"&gt;&lt;code&gt;%s&lt;/code&gt;&lt;/pre&gt;"</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;popts&nbsp;(to_lines&nbsp;esc&nbsp;strings)<br>
&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Pre</span>&nbsp;(opts,&nbsp;strings)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf&nbsp;<span class="string">"&lt;pre%s&gt;%s&lt;/pre&gt;"</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(po&nbsp;opts)&nbsp;(to_lines&nbsp;esc&nbsp;strings)<br>
&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Blocknott</span>&nbsp;(opts,&nbsp;strings)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf&nbsp;<span class="string">"&lt;div%s&gt;%s&lt;/div&gt;"</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(po&nbsp;opts)&nbsp;(to_lines&nbsp;print_nott&nbsp;strings)<br>
&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Numlist</span>&nbsp;&nbsp;elements&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parse_list&nbsp;(sprintf&nbsp;<span class="string">"&lt;ol&gt;%s&lt;/ol&gt;"</span>)&nbsp;elements<br>
&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Bulllist</span>&nbsp;elements&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parse_list&nbsp;(sprintf&nbsp;<span class="string">"&lt;ul&gt;%s&lt;/ul&gt;"</span>)&nbsp;elements<br>
&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Table</span>&nbsp;(topts,&nbsp;rows)&nbsp;<span class="keywordsign">-&gt;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf&nbsp;<span class="string">"&lt;table%s&gt;%s&lt;/table&gt;"</span>&nbsp;(pt&nbsp;topts)&nbsp;(parse_rows&nbsp;rows)<br>
<br>
<span class="keyword">let</span>&nbsp;of_stream&nbsp;?(escape_cdata=<span class="keyword">false</span>)&nbsp;?(escape_nott=<span class="keyword">false</span>)&nbsp;stream&nbsp;=<br>
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;next&nbsp;_&nbsp;=<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">try</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Some</span>&nbsp;(of_block&nbsp;~escape_cdata&nbsp;~escape_nott&nbsp;(<span class="constructor">Stream</span>.next&nbsp;stream))<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">with</span>&nbsp;<span class="constructor">Stream</span>.<span class="constructor">Failure</span>&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">None</span>&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;<span class="constructor">Stream</span>.from&nbsp;next<br>
<br>
</code></body></html>