~ubuntu-branches/ubuntu/trusty/pxp/trusty

« back to all changes in this revision

Viewing changes to doc/manual/html/ref/Example_readme.html

  • Committer: Package Import Robot
  • Author(s): Stéphane Glondu
  • Date: 2013-07-11 11:21:26 UTC
  • mfrom: (6.1.3 sid)
  • Revision ID: package-import@ubuntu.com-20130711112126-5wysiuf0cgjo376r
Tags: 1.2.4-1
* Team upload
* New upstream release
* Update Vcs-*

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
<title>PXP Reference : Example_readme</title>
43
43
</head>
44
44
<body>
45
 
<div class="navbar"><a href="Intro_preprocessor.html">Previous</a>
46
 
&nbsp;<a href="index.html">Up</a>
 
45
<div class="navbar"><a class="pre" href="Intro_preprocessor.html" title="Intro_preprocessor">Previous</a>
 
46
&nbsp;<a class="up" href="index.html" title="Index">Up</a>
47
47
&nbsp;</div>
48
 
<center><h1>Example_readme</h1></center>
49
 
<br>
 
48
<h1>Example_readme</h1>
50
49
<br>
51
50
<span id="1_Thereadmeprocessor"><h1>The <code class="code">readme</code> processor</h1></span>
52
51
<p>
91
90
declared by
92
91
<p>
93
92
 
94
 
<pre></pre><code class="code">&lt;!<span class="constructor">ELEMENT</span>&nbsp;readme&nbsp;(sect1+)&gt;<br>
 
93
<code class="code">&lt;!<span class="constructor">ELEMENT</span>&nbsp;readme&nbsp;(sect1+)&gt;<br>
95
94
&lt;!<span class="constructor">ATTLIST</span>&nbsp;readme<br>
96
95
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title&nbsp;<span class="constructor">CDATA</span>&nbsp;<span class="keywordsign">#</span><span class="constructor">REQUIRED</span>&gt;<br>
97
 
</code><pre></pre>
 
96
</code>
98
97
<p>
99
98
 
100
99
This means that this element contains one or more sections of the first level
106
105
The three levels of sections are declared as follows:
107
106
<p>
108
107
 
109
 
<pre></pre><code class="code">&lt;!<span class="constructor">ELEMENT</span>&nbsp;sect1&nbsp;(title,(sect2<span class="keywordsign">|</span>p<span class="keywordsign">|</span>ul)+)&gt;<br>
 
108
<code class="code">&lt;!<span class="constructor">ELEMENT</span>&nbsp;sect1&nbsp;(title,(sect2<span class="keywordsign">|</span>p<span class="keywordsign">|</span>ul)+)&gt;<br>
110
109
<br>
111
110
&lt;!<span class="constructor">ELEMENT</span>&nbsp;sect2&nbsp;(title,(sect3<span class="keywordsign">|</span>p<span class="keywordsign">|</span>ul)+)&gt;<br>
112
111
<br>
113
112
&lt;!<span class="constructor">ELEMENT</span>&nbsp;sect3&nbsp;(title,(p<span class="keywordsign">|</span>ul)+)&gt;<br>
114
 
</code><pre></pre>
 
113
</code>
115
114
<p>
116
115
 
117
116
Every section has a <code class="code">title</code> element as first subelement. After
126
125
a parameter entity:
127
126
<p>
128
127
 
129
 
<pre></pre><code class="code">&lt;!<span class="constructor">ENTITY</span>&nbsp;%&nbsp;p.like&nbsp;<span class="string">"p|ul"</span>&gt;<br>
 
128
<code class="code">&lt;!<span class="constructor">ENTITY</span>&nbsp;%&nbsp;p.like&nbsp;<span class="string">"p|ul"</span>&gt;<br>
130
129
<br>
131
130
&lt;!<span class="constructor">ELEMENT</span>&nbsp;sect1&nbsp;(title,(sect2|%p.like;)+)&gt;<br>
132
131
<br>
133
132
&lt;!<span class="constructor">ELEMENT</span>&nbsp;sect2&nbsp;(title,(sect3|%p.like;)+)&gt;<br>
134
133
<br>
135
134
&lt;!<span class="constructor">ELEMENT</span>&nbsp;sect3&nbsp;(title,(%p.like;)+)&gt;<br>
136
 
</code><pre></pre>
 
135
</code>
137
136
<p>
138
137
 
139
138
Here, the entity <code class="code">p.like</code> is nothing but a macro abbreviating the same
157
156
with line breaks (<code class="code">br</code>):
158
157
<p>
159
158
 
160
 
<pre></pre><code class="code">&lt;!<span class="constructor">ELEMENT</span>&nbsp;title&nbsp;(<span class="keywordsign">#</span><span class="constructor">PCDATA</span><span class="keywordsign">|</span>br)*&gt;<br>
161
 
</code><pre></pre>
 
159
<code class="code">&lt;!<span class="constructor">ELEMENT</span>&nbsp;title&nbsp;(<span class="keywordsign">#</span><span class="constructor">PCDATA</span><span class="keywordsign">|</span>br)*&gt;<br>
 
160
</code>
162
161
<p>
163
162
 
164
163
Compared with the <code class="code">title</code> <b>attribute</b> of the <code class="code">readme</code> element, this
171
170
<code class="code">title</code>, but it allows more inner elements:
172
171
<p>
173
172
 
174
 
<pre></pre><code class="code">&lt;!<span class="constructor">ENTITY</span>&nbsp;%&nbsp;text&nbsp;<span class="string">"br|code|em|footnote|a"</span>&gt;<br>
 
173
<code class="code">&lt;!<span class="constructor">ENTITY</span>&nbsp;%&nbsp;text&nbsp;<span class="string">"br|code|em|footnote|a"</span>&gt;<br>
175
174
<br>
176
175
&lt;!<span class="constructor">ELEMENT</span>&nbsp;p&nbsp;(<span class="keywordsign">#</span><span class="constructor">PCDATA</span>|%text;)*&gt;<br>
177
 
</code><pre></pre>
 
176
</code>
178
177
<p>
179
178
 
180
179
Line breaks do not have inner structure, so they are declared as being empty:
181
180
<p>
182
181
 
183
 
<pre></pre><code class="code">&lt;!<span class="constructor">ELEMENT</span>&nbsp;br&nbsp;<span class="constructor">EMPTY</span>&gt;<br>
184
 
</code><pre></pre>
 
182
<code class="code">&lt;!<span class="constructor">ELEMENT</span>&nbsp;br&nbsp;<span class="constructor">EMPTY</span>&gt;<br>
 
183
</code>
185
184
<p>
186
185
 
187
186
This means that really nothing is allowed within <code class="code">br</code>; you must always
192
191
text can be indicated by <code class="code">em</code>:
193
192
<p>
194
193
 
195
 
<pre></pre><code class="code">&lt;!<span class="constructor">ELEMENT</span>&nbsp;code&nbsp;(<span class="keywordsign">#</span><span class="constructor">PCDATA</span>)&gt;<br>
 
194
<code class="code">&lt;!<span class="constructor">ELEMENT</span>&nbsp;code&nbsp;(<span class="keywordsign">#</span><span class="constructor">PCDATA</span>)&gt;<br>
196
195
<br>
197
196
&lt;!<span class="constructor">ELEMENT</span>&nbsp;em&nbsp;(<span class="keywordsign">#</span><span class="constructor">PCDATA</span>|%text;)*&gt;<br>
198
 
</code><pre></pre>
 
197
</code>
199
198
<p>
200
199
 
201
200
That <code class="code">code</code> elements are not allowed to contain further markup
207
206
contain paragraph-level material:
208
207
<p>
209
208
 
210
 
<pre></pre><code class="code">&lt;!<span class="constructor">ELEMENT</span>&nbsp;ul&nbsp;(li+)&gt;<br>
 
209
<code class="code">&lt;!<span class="constructor">ELEMENT</span>&nbsp;ul&nbsp;(li+)&gt;<br>
211
210
<br>
212
211
&lt;!<span class="constructor">ELEMENT</span>&nbsp;li&nbsp;(%p.like;)*&gt;<br>
213
 
</code><pre></pre>
 
212
</code>
214
213
<p>
215
214
 
216
215
Footnotes are described by the text of the note; this text may contain
218
217
footnotes, or to specify how footnote references are printed.
219
218
<p>
220
219
 
221
 
<pre></pre><code class="code">&lt;!<span class="constructor">ELEMENT</span>&nbsp;footnote&nbsp;(<span class="keywordsign">#</span><span class="constructor">PCDATA</span>|%text;)*&gt;<br>
222
 
</code><pre></pre>
 
220
<code class="code">&lt;!<span class="constructor">ELEMENT</span>&nbsp;footnote&nbsp;(<span class="keywordsign">#</span><span class="constructor">PCDATA</span>|%text;)*&gt;<br>
 
221
</code>
223
222
<p>
224
223
 
225
224
Hyperlinks are written as in HTML. The anchor tag contains the text
231
230
name), and the link to a converted document must be converted, too.
232
231
<p>
233
232
 
234
 
<pre></pre><code class="code">&lt;!<span class="constructor">ELEMENT</span>&nbsp;a&nbsp;(<span class="keywordsign">#</span><span class="constructor">PCDATA</span>)*&gt;<br>
 
233
<code class="code">&lt;!<span class="constructor">ELEMENT</span>&nbsp;a&nbsp;(<span class="keywordsign">#</span><span class="constructor">PCDATA</span>)*&gt;<br>
235
234
&lt;!<span class="constructor">ATTLIST</span>&nbsp;a&nbsp;<br>
236
235
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;href&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">CDATA</span>&nbsp;<span class="keywordsign">#</span><span class="constructor">IMPLIED</span><br>
237
236
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readmeref&nbsp;<span class="constructor">CDATA</span>&nbsp;<span class="keywordsign">#</span><span class="constructor">IMPLIED</span><br>
238
237
&gt;<br>
239
 
</code><pre></pre>
 
238
</code>
240
239
<p>
241
240
 
242
241
Note that although it is only sensible to specify one of the two attributes,
246
245
So far the DTD. Finally, here is a sample document for it:
247
246
<p>
248
247
 
249
 
<pre></pre><code class="code">&lt;?xml&nbsp;version=<span class="string">"1.0"</span>&nbsp;encoding=<span class="string">"ISO-8859-1"</span><span class="keywordsign">?&gt;</span><br>
 
248
<code class="code">&lt;?xml&nbsp;version=<span class="string">"1.0"</span>&nbsp;encoding=<span class="string">"ISO-8859-1"</span><span class="keywordsign">?&gt;</span><br>
250
249
&lt;!<span class="constructor">DOCTYPE</span>&nbsp;readme&nbsp;<span class="constructor">SYSTEM</span>&nbsp;<span class="string">"readme.dtd"</span>&gt;<br>
251
250
&lt;readme&nbsp;title=<span class="string">"How&nbsp;to&nbsp;use&nbsp;the&nbsp;readme&nbsp;converters"</span>&gt;<br>
252
251
&nbsp;&nbsp;&lt;sect1&gt;<br>
285
284
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/p&gt;<br>
286
285
&nbsp;&nbsp;&lt;/sect1&gt;<br>
287
286
&lt;/readme&gt;<br>
288
 
</code><pre></pre>
 
287
</code>
289
288
<p>
290
289
 
291
290
<span id="2_ThereadmeconvertertoHTML"><h2>The <code class="code">readme</code> converter to HTML</h2></span>
317
316
<span id="3_Header"><h3>Header</h3></span>
318
317
<p>
319
318
 
320
 
<pre></pre><code class="code"><span class="keyword">open</span>&nbsp;<span class="constructor">Pxp_types</span><br>
 
319
<code class="code"><span class="keyword">open</span>&nbsp;<span class="constructor">Pxp_types</span><br>
321
320
<span class="keyword">open</span>&nbsp;<span class="constructor">Pxp_document</span><br>
322
321
<span class="keyword">open</span>&nbsp;<span class="constructor">Pxp_dtd</span>.<span class="constructor">Entity</span><br>
323
 
</code><pre></pre>
 
322
</code>
324
323
<p>
325
324
 
326
325
<span id="3_Typedeclarations"><h3>Type declarations</h3></span>
327
326
<p>
328
327
 
329
 
<pre></pre><code class="code"><span class="keyword">class</span>&nbsp;<span class="keyword">type</span>&nbsp;footnote_printer&nbsp;=<br>
 
328
<code class="code"><span class="keyword">class</span>&nbsp;<span class="keyword">type</span>&nbsp;footnote_printer&nbsp;=<br>
330
329
&nbsp;&nbsp;<span class="keyword">object</span><br>
331
330
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;footnote_to_html&nbsp;:&nbsp;store_type&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
332
331
&nbsp;&nbsp;<span class="keyword">end</span><br>
336
335
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;alloc_footnote&nbsp;:&nbsp;footnote_printer&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
337
336
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;print_footnotes&nbsp;:&nbsp;out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
338
337
&nbsp;&nbsp;<span class="keyword">end</span><br>
339
 
</code><pre></pre>
 
338
</code>
340
339
<p>
341
340
 
342
341
For comments see the implementations below.
361
360
<code class="code">footnote_to_html</code>.
362
361
<p>
363
362
 
364
 
<pre></pre><code class="code"><span class="keyword">class</span>&nbsp;store&nbsp;=<br>
 
363
<code class="code"><span class="keyword">class</span>&nbsp;store&nbsp;=<br>
365
364
&nbsp;&nbsp;<span class="keyword">object</span>&nbsp;(self)<br>
366
365
<br>
367
366
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;<span class="keyword">mutable</span>&nbsp;footnotes&nbsp;=&nbsp;(&nbsp;[]&nbsp;:&nbsp;(int&nbsp;*&nbsp;footnote_printer)&nbsp;list&nbsp;)<br>
385
384
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span><br>
386
385
<br>
387
386
&nbsp;&nbsp;<span class="keyword">end</span><br>
388
 
</code><pre></pre>
 
387
</code>
389
388
<p>
390
389
 
391
390
<span id="3_Thefunctionescapehtml"><h3>The function <code class="code">escape_html</code></h3></span>
395
394
representations. For example, 
396
395
<p>
397
396
 
398
 
<pre></pre><code class="code">&nbsp;escape_html&nbsp;<span class="string">"&lt;&gt;"</span>&nbsp;=&nbsp;<span class="string">"&amp;lt;&amp;gt;"</span>&nbsp;</code><pre></pre>
 
397
<code class="code">&nbsp;escape_html&nbsp;<span class="string">"&lt;&gt;"</span>&nbsp;=&nbsp;<span class="string">"&amp;lt;&amp;gt;"</span>&nbsp;</code>
399
398
<p>
400
399
 
401
400
Other characters are left unchanged.
402
401
<p>
403
402
 
404
 
<pre></pre><code class="code"><span class="keyword">let</span>&nbsp;escape_html&nbsp;s&nbsp;=<br>
 
403
<code class="code"><span class="keyword">let</span>&nbsp;escape_html&nbsp;s&nbsp;=<br>
405
404
&nbsp;&nbsp;<span class="constructor">Str</span>.global_substitute<br>
406
405
&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Str</span>.regexp&nbsp;<span class="string">"&lt;\\|&gt;\\|&amp;\\|\"\\|@\\|:"</span>)<br>
407
406
&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keyword">fun</span>&nbsp;s&nbsp;<span class="keywordsign">-&gt;</span><br>
414
413
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="string">":"</span>&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="string">"&amp;#58;"</span><br>
415
414
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;_&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keyword">assert</span>&nbsp;<span class="keyword">false</span>)<br>
416
415
&nbsp;&nbsp;&nbsp;&nbsp;s<br>
417
 
</code><pre></pre>
 
416
</code>
418
417
<p>
419
418
 
420
419
Note (of 2009): There is also the Ocamlnet function
433
432
<code class="code">store</code> object which collects the footnotes.
434
433
<p>
435
434
 
436
 
<pre></pre><code class="code"><span class="keyword">class</span>&nbsp;<span class="keyword">virtual</span>&nbsp;shared&nbsp;=<br>
 
435
<code class="code"><span class="keyword">class</span>&nbsp;<span class="keyword">virtual</span>&nbsp;shared&nbsp;=<br>
437
436
&nbsp;&nbsp;<span class="keyword">object</span>&nbsp;(self)<br>
438
437
<br>
439
438
&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">(*&nbsp;---&nbsp;default_ext&nbsp;---&nbsp;*)</span><br>
454
453
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;<span class="keyword">virtual</span>&nbsp;to_html&nbsp;:&nbsp;store&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
455
454
<br>
456
455
&nbsp;&nbsp;<span class="keyword">end</span><br>
457
 
</code><pre></pre>
 
456
</code>
458
457
<p>
459
458
 
460
459
For an introduction into extension classes see <a href="Intro_extensions.html"><code class="code"><span class="constructor">Intro_extensions</span></code></a>.
471
470
<a href="Pxp_document.node-c.html#METHODdata"><code class="code"><span class="constructor">Pxp_document</span>.node.data</code></a>).
472
471
<p>
473
472
 
474
 
<pre></pre><code class="code"><span class="keyword">class</span>&nbsp;only_data&nbsp;=<br>
 
473
<code class="code"><span class="keyword">class</span>&nbsp;only_data&nbsp;=<br>
475
474
&nbsp;&nbsp;<span class="keyword">object</span>&nbsp;(self)<br>
476
475
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">inherit</span>&nbsp;shared<br>
477
476
<br>
478
477
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;to_html&nbsp;store&nbsp;ch&nbsp;=<br>
479
478
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output_string&nbsp;ch&nbsp;(escape_html&nbsp;(self&nbsp;<span class="keywordsign">#</span>&nbsp;node&nbsp;<span class="keywordsign">#</span>&nbsp;data))<br>
480
479
&nbsp;&nbsp;<span class="keyword">end</span><br>
481
 
</code><pre></pre>
 
480
</code>
482
481
<p>
483
482
 
484
483
<span id="3_Theclassreadme"><h3>The class <code class="code">readme</code></h3></span>
497
496
the footnotes. Finally, the end tags of the HTML pages are printed.
498
497
<p>
499
498
 
500
 
<pre></pre><code class="code"><span class="keyword">class</span>&nbsp;readme&nbsp;=<br>
 
499
<code class="code"><span class="keyword">class</span>&nbsp;readme&nbsp;=<br>
501
500
&nbsp;&nbsp;<span class="keyword">object</span>&nbsp;(self)<br>
502
501
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">inherit</span>&nbsp;shared<br>
503
502
<br>
574
573
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output_string&nbsp;ch&nbsp;html_trailer;<br>
575
574
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output_string&nbsp;ch&nbsp;<span class="string">"&lt;/html&gt;\n"</span>;<br>
576
575
&nbsp;&nbsp;<span class="keyword">end</span><br>
577
 
</code><pre></pre>
 
576
</code>
578
577
<p>
579
578
 
580
579
This class is an example how to access the value of an attribute: The
582
581
<a href="Pxp_document.node-c.html#METHODattribute"><code class="code"><span class="constructor">Pxp_document</span>.node.attribute</code></a>). As this attribute has been declared
583
582
as CDATA and as being required, the value has always the form <code class="code"><span class="constructor">Value</span>
584
583
s</code> where <code class="code">s</code> is the string value of the attribute. Attribute values
585
 
have type <a href="Pxp_core_types.S.html#TYPEatt_value"><code class="code"><span class="constructor">Pxp_core_types</span>.<span class="constructor">S</span>.att_value</code></a>.
 
584
have type <a href="Pxp_types.html#TYPEatt_value"><code class="code"><span class="constructor">Pxp_types</span>.att_value</code></a>.
586
585
<p>
587
586
 
588
587
You can also see how entity contents can be accessed. A parameter
605
604
<code class="code">section</code> by the HTML name of the headline tag.
606
605
<p>
607
606
 
608
 
<pre></pre><code class="code"><span class="keyword">class</span>&nbsp;section&nbsp;the_tag&nbsp;=<br>
 
607
<code class="code"><span class="keyword">class</span>&nbsp;section&nbsp;the_tag&nbsp;=<br>
609
608
&nbsp;&nbsp;<span class="keyword">object</span>&nbsp;(self)<br>
610
609
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">inherit</span>&nbsp;shared<br>
611
610
<br>
628
627
<span class="keyword">class</span>&nbsp;sect1&nbsp;=&nbsp;section&nbsp;<span class="string">"h1"</span><br>
629
628
<span class="keyword">class</span>&nbsp;sect2&nbsp;=&nbsp;section&nbsp;<span class="string">"h3"</span><br>
630
629
<span class="keyword">class</span>&nbsp;sect3&nbsp;=&nbsp;section&nbsp;<span class="string">"h4"</span><br>
631
 
</code><pre></pre>
 
630
</code>
632
631
<p>
633
632
 
634
633
Section elements are converted to HTML by printing a headline and then
654
653
inner elements, and the end tag.
655
654
<p>
656
655
 
657
 
<pre></pre><code class="code"><span class="keyword">class</span>&nbsp;map_tag&nbsp;the_target_tag&nbsp;=<br>
 
656
<code class="code"><span class="keyword">class</span>&nbsp;map_tag&nbsp;the_target_tag&nbsp;=<br>
658
657
&nbsp;&nbsp;<span class="keyword">object</span>&nbsp;(self)<br>
659
658
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">inherit</span>&nbsp;shared<br>
660
659
<br>
672
671
<span class="keyword">class</span>&nbsp;em&nbsp;=&nbsp;map_tag&nbsp;<span class="string">"b"</span><br>
673
672
<span class="keyword">class</span>&nbsp;ul&nbsp;=&nbsp;map_tag&nbsp;<span class="string">"ul"</span><br>
674
673
<span class="keyword">class</span>&nbsp;li&nbsp;=&nbsp;map_tag&nbsp;<span class="string">"li"</span><br>
675
 
</code><pre></pre>
 
674
</code>
676
675
<p>
677
676
 
678
677
<span id="3_Theclassbr"><h3>The class <code class="code">br</code></h3></span>
682
681
forbids the end tag of <code class="code">br</code>.
683
682
<p>
684
683
 
685
 
<pre></pre><code class="code"><span class="keyword">class</span>&nbsp;br&nbsp;=<br>
 
684
<code class="code"><span class="keyword">class</span>&nbsp;br&nbsp;=<br>
686
685
&nbsp;&nbsp;<span class="keyword">object</span>&nbsp;(self)<br>
687
686
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">inherit</span>&nbsp;shared<br>
688
687
<br>
692
691
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keyword">fun</span>&nbsp;n&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;n&nbsp;<span class="keywordsign">#</span>&nbsp;extension&nbsp;<span class="keywordsign">#</span>&nbsp;to_html&nbsp;store&nbsp;ch)<br>
693
692
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(self&nbsp;<span class="keywordsign">#</span>&nbsp;node&nbsp;<span class="keywordsign">#</span>&nbsp;sub_nodes);<br>
694
693
&nbsp;&nbsp;<span class="keyword">end</span><br>
695
 
</code><pre></pre>
 
694
</code>
696
695
<p>
697
696
 
698
697
<span id="3_Theclasscode"><h3>The class <code class="code">code</code></h3></span>
703
702
expanded to spaces.
704
703
<p>
705
704
 
706
 
<pre></pre><code class="code"><span class="keyword">class</span>&nbsp;code&nbsp;=<br>
 
705
<code class="code"><span class="keyword">class</span>&nbsp;code&nbsp;=<br>
707
706
&nbsp;&nbsp;<span class="keyword">object</span>&nbsp;(self)<br>
708
707
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">inherit</span>&nbsp;shared<br>
709
708
<br>
729
728
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output_string&nbsp;ch&nbsp;(escape_html&nbsp;(preprocess&nbsp;0&nbsp;0));<br>
730
729
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output_string&nbsp;ch&nbsp;<span class="string">"&lt;/pre&gt;&lt;/p&gt;"</span>;<br>
731
730
&nbsp;&nbsp;<span class="keyword">end</span><br>
732
 
</code><pre></pre>
 
731
</code>
733
732
<p>
734
733
 
735
734
<span id="3_Theclassa"><h3>The class <code class="code">a</code></h3></span>
747
746
contents.
748
747
<p>
749
748
 
750
 
<pre></pre><code class="code"><span class="keyword">class</span>&nbsp;a&nbsp;=<br>
 
749
<code class="code"><span class="keyword">class</span>&nbsp;a&nbsp;=<br>
751
750
&nbsp;&nbsp;<span class="keyword">object</span>&nbsp;(self)<br>
752
751
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">inherit</span>&nbsp;shared<br>
753
752
<br>
772
771
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output_string&nbsp;ch&nbsp;<span class="string">"&lt;/a&gt;"</span>;<br>
773
772
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
774
773
&nbsp;&nbsp;<span class="keyword">end</span><br>
775
 
</code><pre></pre>
 
774
</code>
776
775
<p>
777
776
 
778
777
<span id="3_Theclassfootnote"><h3>The class <code class="code">footnote</code></h3></span>
808
807
within a footnote; the second footnote gets allocated but not printed.
809
808
<p>
810
809
 
811
 
<pre></pre><code class="code"><span class="keyword">class</span>&nbsp;footnote&nbsp;=<br>
 
810
<code class="code"><span class="keyword">class</span>&nbsp;footnote&nbsp;=<br>
812
811
&nbsp;&nbsp;<span class="keyword">object</span>&nbsp;(self)<br>
813
812
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">inherit</span>&nbsp;shared<br>
814
813
<br>
841
840
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output_string&nbsp;ch&nbsp;(<span class="string">"\n&lt;/dd&gt;"</span>)<br>
842
841
&nbsp;<br>
843
842
&nbsp;&nbsp;<span class="keyword">end</span><br>
844
 
</code><pre></pre>
 
843
</code>
845
844
<p>
846
845
 
847
846
<span id="3_Thespecificationofthedocumentmodel"><h3>The specification of the document model</h3></span>
853
852
<a href="Pxp_document.html#VALmake_spec_from_alist"><code class="code"><span class="constructor">Pxp_document</span>.make_spec_from_alist</code></a> for the function definition.
854
853
<p>
855
854
 
856
 
<pre></pre><code class="code"><span class="keyword">let</span>&nbsp;tag_map&nbsp;=<br>
 
855
<code class="code"><span class="keyword">let</span>&nbsp;tag_map&nbsp;=<br>
857
856
&nbsp;&nbsp;make_spec_from_alist<br>
858
857
&nbsp;&nbsp;&nbsp;&nbsp;~data_exemplar:(<span class="keyword">new</span>&nbsp;data_impl&nbsp;(<span class="keyword">new</span>&nbsp;only_data))<br>
859
858
&nbsp;&nbsp;&nbsp;&nbsp;~default_element_exemplar:(<span class="keyword">new</span>&nbsp;element_impl&nbsp;(<span class="keyword">new</span>&nbsp;no_markup))<br>
873
872
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">"a"</span>,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keyword">new</span>&nbsp;element_impl&nbsp;(<span class="keyword">new</span>&nbsp;a));<br>
874
873
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br>
875
874
&nbsp;&nbsp;&nbsp;&nbsp;()<br>
876
 
</code><pre></pre>
 
875
</code>
877
876
<p>
878
877
 
879
878
<span id="2_ThereadmeconvertertoASCII"><h2>The <code class="code">readme</code> converter to ASCII</h2></span>
886
885
<span id="2_Themainprogram"><h2>The main program</h2></span>
887
886
<p>
888
887
 
889
 
<pre></pre><code class="code"><span class="keyword">open</span>&nbsp;<span class="constructor">Pxp_types</span><br>
 
888
<code class="code"><span class="keyword">open</span>&nbsp;<span class="constructor">Pxp_types</span><br>
890
889
<span class="keyword">open</span>&nbsp;<span class="constructor">Pxp_document</span><br>
891
890
<span class="keyword">open</span>&nbsp;<span class="constructor">Pxp_tree_parser</span><br>
892
891
<br>
958
957
<br>
959
958
<span class="keyword">let</span>&nbsp;()&nbsp;=<br>
960
959
&nbsp;&nbsp;main()<br>
961
 
</code><pre></pre>
 
960
</code>
962
961
<p>
963
962
 
964
963