<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</title> </head> <body> <code class="code"><span class="comment">(* This file is part of textile-ocaml.<br> *<br> * textile-ocaml is free software: you can redistribute it and/or modify<br> * it under the terms of the GNU General Public License as published by<br> * the Free Software Foundation, either version 3 of the License, or<br> * (at your option) any later version.<br> *<br> * textile-ocaml is distributed in the hope that it will be useful,<br> * but WITHOUT ANY WARRANTY; without even the implied warranty of<br> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the<br> * GNU General Public License for more details.<br> *<br> * You should have received a copy of the GNU General Public License<br> * along with textile-ocaml. If not, see <http://www.gnu.org/licenses/>.<br> *<br> * Copyright 2011 Alexander Markov *)</span><br> <br> <span class="keyword">open</span> <span class="constructor">Printf</span><br> <br> <span class="keyword">type</span> attr =<br> <span class="keywordsign">|</span> <span class="constructor">Class</span> <span class="keyword">of</span> string <span class="comment">(* p(myclass). *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Id</span> <span class="keyword">of</span> string <span class="comment">(* p(#myid). *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Style</span> <span class="keyword">of</span> string <span class="comment">(* p{color:red}. *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Language</span> <span class="keyword">of</span> string <span class="comment">(* p[fr-fr]. *)</span><br> <span class="keyword">type</span> img_float =<br> <span class="keywordsign">|</span> <span class="constructor">Float_left</span><br> <span class="keywordsign">|</span> <span class="constructor">Float_right</span><br> <span class="keyword">type</span> phrase =<br> <span class="keywordsign">|</span> <span class="constructor">CData</span> <span class="keyword">of</span> string<br> <span class="keywordsign">|</span> <span class="constructor">Emphasis</span> <span class="keyword">of</span> (attr list * phrase list) <span class="comment">(* _ *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Strong</span> <span class="keyword">of</span> (attr list * phrase list) <span class="comment">(* * *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Italic</span> <span class="keyword">of</span> (attr list * phrase list) <span class="comment">(* __ *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Bold</span> <span class="keyword">of</span> (attr list * phrase list) <span class="comment">(* ** *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Citation</span> <span class="keyword">of</span> (attr list * phrase list) <span class="comment">(* ?? *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Deleted</span> <span class="keyword">of</span> (attr list * phrase list) <span class="comment">(* - *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Inserted</span> <span class="keyword">of</span> (attr list * phrase list) <span class="comment">(* + *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Superscript</span> <span class="keyword">of</span> (attr list * phrase list) <span class="comment">(* ^ *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Subscript</span> <span class="keyword">of</span> (attr list * phrase list) <span class="comment">(* ~ *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Span</span> <span class="keyword">of</span> (attr list * phrase list) <span class="comment">(* % *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Code</span> <span class="keyword">of</span> (attr list * string) <span class="comment">(* @ *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Notextile</span> <span class="keyword">of</span> string <span class="comment">(* == *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Acronym</span> <span class="keyword">of</span> string * string <span class="comment">(* ABC(Always Be Closing *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Image</span> <span class="keyword">of</span> attr list * img_float option<br> * string * string option <span class="comment">(* !imgsrc(alt)! *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Link</span> <span class="keyword">of</span> (attr list * phrase list) *<br> string option * string <span class="comment">(* "linktext(title)":url *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Reference</span> <span class="keyword">of</span> int <span class="comment">(* [1] *)</span><br> <span class="keyword">type</span> line =<br> phrase list<br> <span class="keyword">type</span> talign =<br> <span class="keywordsign">|</span> <span class="constructor">Right</span> </code><table><tr><td> </td><td><span class="comment">(** > *)</span></td></tr></table><code class="code"><br> <span class="keywordsign">|</span> <span class="constructor">Left</span> </code><table><tr><td> </td><td><span class="comment">(** < *)</span></td></tr></table><code class="code"><br> <span class="keywordsign">|</span> <span class="constructor">Center</span> </code><table><tr><td> </td><td><span class="comment">(** = *)</span></td></tr></table><code class="code"><br> <span class="keywordsign">|</span> <span class="constructor">Justify</span> </code><table><tr><td> </td><td><span class="comment">(** <> *)</span></td></tr></table><code class="code"><br> <span class="keyword">type</span> valign =<br> <span class="keywordsign">|</span> <span class="constructor">Top</span> </code><table><tr><td> </td><td><span class="comment">(** ^ *)</span></td></tr></table><code class="code"><br> <span class="keywordsign">|</span> <span class="constructor">Middle</span> </code><table><tr><td> </td><td><span class="comment">(** - *)</span></td></tr></table><code class="code"><br> <span class="keywordsign">|</span> <span class="constructor">Bottom</span> </code><table><tr><td> </td><td><span class="comment">(** ~ *)</span></td></tr></table><code class="code"><br> <span class="keyword">type</span> padding =<br> int * int<br> <span class="keyword">type</span> options =<br> attr list * talign option * padding<br> <span class="keyword">type</span> cellspan =<br> int option * int option<br> <span class="keyword">type</span> tableoptions =<br> options * valign option<br> <span class="keyword">type</span> celltype =<br> <span class="keywordsign">|</span> <span class="constructor">Data</span><br> <span class="keywordsign">|</span> <span class="constructor">Head</span> <span class="comment">(* _ *)</span><br> <span class="keyword">type</span> celloptions =<br> celltype * tableoptions * cellspan<br> <span class="keyword">type</span> cell =<br> celloptions * line list<br> <span class="keyword">type</span> row =<br> tableoptions * cell list<br> <span class="keyword">type</span> element =<br> int * line<br> <span class="keyword">type</span> block =<br> <span class="keywordsign">|</span> <span class="constructor">Header</span> <span class="keyword">of</span> int * (options * line list) <span class="comment">(* h1. *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Blockquote</span> <span class="keyword">of</span> (options * line list) <span class="comment">(* bq. *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Footnote</span> <span class="keyword">of</span> int * (options * line list) <span class="comment">(* fnn. *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Paragraph</span> <span class="keyword">of</span> (options * line list) <span class="comment">(* p. *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Blockcode</span> <span class="keyword">of</span> (options * string list) <span class="comment">(* bc. *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Pre</span> <span class="keyword">of</span> (options * string list) <span class="comment">(* pre. *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Blocknott</span> <span class="keyword">of</span> (options * string list) <span class="comment">(* notextile. *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Numlist</span> <span class="keyword">of</span> element list <span class="comment">(* # *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Bulllist</span> <span class="keyword">of</span> element list <span class="comment">(* * *)</span><br> <span class="keywordsign">|</span> <span class="constructor">Table</span> <span class="keyword">of</span> (tableoptions * row list) <span class="comment">(* |t|a|b| *)</span><br> <br> <br> <span class="keyword">let</span> <span class="keyword">rec</span> string_of_line line =<br> <span class="keyword">let</span> buf = <span class="constructor">Buffer</span>.create 512 <span class="keyword">in</span><br> <span class="keyword">let</span> add = <span class="constructor">Buffer</span>.add_string buf <span class="keyword">in</span><br> <span class="keyword">let</span> <span class="keyword">rec</span> loop = <span class="keyword">function</span><br> <span class="keywordsign">|</span> h::t <span class="keywordsign">-></span> (<span class="keyword">match</span> h <span class="keyword">with</span><br> <span class="keywordsign">|</span> <span class="constructor">CData</span> s <span class="keywordsign">-></span> add s<br> <span class="keywordsign">|</span> <span class="constructor">Emphasis</span> (_, l)<br> <span class="keywordsign">|</span> <span class="constructor">Strong</span> (_, l)<br> <span class="keywordsign">|</span> <span class="constructor">Italic</span> (_, l)<br> <span class="keywordsign">|</span> <span class="constructor">Bold</span> (_, l)<br> <span class="keywordsign">|</span> <span class="constructor">Citation</span> (_, l)<br> <span class="keywordsign">|</span> <span class="constructor">Deleted</span> (_, l)<br> <span class="keywordsign">|</span> <span class="constructor">Inserted</span> (_, l)<br> <span class="keywordsign">|</span> <span class="constructor">Superscript</span> (_, l)<br> <span class="keywordsign">|</span> <span class="constructor">Subscript</span> (_, l)<br> <span class="keywordsign">|</span> <span class="constructor">Span</span> (_, l) <span class="keywordsign">-></span><br> add (string_of_line l)<br> <span class="keywordsign">|</span> <span class="constructor">Acronym</span> (s, _)<br> <span class="keywordsign">|</span> <span class="constructor">Code</span> (_, s) <span class="keywordsign">-></span><br> add s<br> <span class="keywordsign">|</span> <span class="constructor">Notextile</span> s <span class="keywordsign">-></span> <span class="comment">(* TODO: whoops, what we have to do? *)</span><br> add s<br> <span class="keywordsign">|</span> <span class="constructor">Image</span> _ <span class="keywordsign">-></span> ()<br> <span class="keywordsign">|</span> <span class="constructor">Link</span> ((_, l), _, _) <span class="keywordsign">-></span><br> add (string_of_line l)<br> <span class="keywordsign">|</span> <span class="constructor">Reference</span> i <span class="keywordsign">-></span><br> <span class="constructor">Printf</span>.bprintf buf <span class="string">"[%d]"</span> i);<br> loop t<br> <span class="keywordsign">|</span> [] <span class="keywordsign">-></span> <span class="constructor">Buffer</span>.contents buf <span class="keyword">in</span><br> loop line<br> </code></body></html>