1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-06-26 04:00:43 +03:00

Adopted Markdown for extension documentation

This commit is contained in:
Graham Nelson 2023-08-23 12:15:46 +01:00
parent 393fcc651a
commit 88f970e3eb
33 changed files with 1778 additions and 2258 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
[Version](notes/versioning.md): 10.2.0-beta+6X03 'Krypton' (18 August 2023)
[Version](notes/versioning.md): 10.2.0-beta+6X04 'Krypton' (23 August 2023)
## About Inform

View file

@ -1,3 +1,3 @@
Prerelease: beta
Build Date: 18 August 2023
Build Number: 6X03
Build Date: 23 August 2023
Build Number: 6X04

View file

@ -614,7 +614,7 @@ nests, respectively.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">shared_nest_list</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="function-syntax">Supervisor::internal</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Supervisor::internal</span></span>:<br/>Project Services - <a href="5-ps2.html#SP39">&#167;39</a><br/>Extensions Index Page - <a href="7-eip.html#SP1_1">&#167;1.1</a><br/>Documentation Compiler - <a href="7-dc.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="function-syntax">Supervisor::internal</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Supervisor::internal</span></span>:<br/>Project Services - <a href="5-ps2.html#SP39">&#167;39</a><br/>Extensions Index Page - <a href="7-eip.html#SP1_1">&#167;1.1</a><br/>Documentation Compiler - <a href="7-dc.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RUN_ONLY_FROM_PHASE</span><span class="plain-syntax">(</span><span class="constant-syntax">NESTED_INBUILD_PHASE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">shared_internal_nest</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>

View file

@ -74,14 +74,7 @@ which use this module:
<span class="definition-keyword">enum</span> <span class="constant-syntax">build_skill_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">build_step_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">build_vertex_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">cdoc_heading_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">cdoc_example_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">cdoc_passage_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">cdoc_phrase_defn_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">cdoc_paragraph_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">cdoc_code_sample_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">cdoc_code_line_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">cdoc_source_error_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">compiled_documentation_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">control_structure_phrase_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">copy_error_CLASS</span>
@ -114,14 +107,7 @@ which use this module:
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">build_skill</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">build_step</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">cdoc_heading</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">cdoc_example</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">cdoc_passage</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">cdoc_phrase_defn</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">cdoc_paragraph</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">cdoc_code_sample</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">cdoc_code_line</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">cdoc_source_error</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">control_structure_phrase</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">copy_error</span><span class="plain-syntax">)</span>

View file

@ -151,7 +151,7 @@ can't install to a read-only nest.
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Nests::get_location</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Nests::get_location</span></span>:<br/>Inbuild Control - <a href="1-ic.html#SP15">&#167;15</a><br/>Extensions Index Page - <a href="7-eip.html#SP1_2_1">&#167;1.2.1</a><br/>The Installer - <a href="7-ti.html#SP3_2">&#167;3.2</a><br/>Documentation Compiler - <a href="7-dc.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Nests::get_location</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Nests::get_location</span></span>:<br/>Inbuild Control - <a href="1-ic.html#SP15">&#167;15</a><br/>Extensions Index Page - <a href="7-eip.html#SP1_2_1">&#167;1.2.1</a><br/>The Installer - <a href="7-ti.html#SP3_2">&#167;3.2</a><br/>Documentation Compiler - <a href="7-dc.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">location</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>

View file

@ -195,7 +195,7 @@ would both pass, whereas <a href="2-wrk.html#SP4" class="internal">Works::normal
<span class="plain-syntax"> </span><span class="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre</span><span class="plain-syntax">, </span><span class="constant-syntax">GENRE_WRITE_WORK_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">work</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Works::write_to_HTML_file</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Works::write_to_HTML_file</span></span>:<br/><a href="2-wrk.html#SP7">&#167;7</a><br/>Documentation Renderer - <a href="7-dr.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">fancy</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Works::write_to_HTML_file</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Works::write_to_HTML_file</span></span>:<br/><a href="2-wrk.html#SP7">&#167;7</a><br/>Documentation Renderer - <a href="7-dr.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">fancy</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">raw_title</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">fancy</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"extensionindexentry"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" by "</span><span class="plain-syntax">);</span>

View file

@ -111,7 +111,7 @@ compiled, is a file vertex.
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure build_vertex is accessed in 1/sm, 3/ib, 3/bs2, 3/is, 3/is3, 3/is4, 4/em, 5/es, 5/ks, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 7/tm, 7/eip, 7/ti, 7/tc, 7/dt, 7/dc, 7/dr and here.</li></ul>
<ul class="endnotetexts"><li>The structure build_vertex is accessed in 1/sm, 3/ib, 3/bs2, 3/is, 3/is3, 3/is4, 4/em, 5/es, 5/ks, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 7/tm, 7/eip, 7/ti, 7/tc, 7/dc, 7/dr, 7/dim and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. Creation. </b>First, the three colours of vertex.
</p>

View file

@ -82,7 +82,7 @@ assimilating a binary for a kit is a skill.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure build_skill is accessed in 2/gnr, 7/dt, 7/dr and here.</li></ul>
<ul class="endnotetexts"><li>The structure build_skill is accessed in 2/gnr, 7/dc, 7/dr, 7/dim and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>Skills provide two method functions: one constructs a shell command to
perform the skill, and the other performs the skill directly by calling some
function within the current executable. These methods are optional, and if

View file

@ -953,7 +953,7 @@ This is that time.
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">synopsis</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">read_into_file</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">doc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TextFromFiles::torn_off_documentation</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">read_into_file</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">doc</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">documentation</span><span class="plain-syntax"> = </span><a href="7-dc.html#SP6" class="function-link"><span class="function-syntax">DocumentationCompiler::compile</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">doc</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">doc</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">documentation</span><span class="plain-syntax"> = </span><a href="7-dc.html#SP7" class="function-link"><span class="function-syntax">DocumentationCompiler::compile</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">doc</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">documentation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">read_into_file</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">your_ref</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_inbuild_copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-es.html#SP10_2" class="named-paragraph-link"><span class="named-paragraph">Break the text into sentences</span><span class="named-paragraph-number">10.2</span></a></span><span class="plain-syntax">;</span>
@ -1047,7 +1047,7 @@ then its sentences will go to the extension's own tree.
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">EXT_MISWORDED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">error_text</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">documentation</span><span class="plain-syntax"> = </span><a href="7-dc.html#SP2" class="function-link"><span class="function-syntax">DocumentationCompiler::compile_from_path</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">D</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">documentation</span><span class="plain-syntax"> = </span><a href="7-dc.html#SP3" class="function-link"><span class="function-syntax">DocumentationCompiler::compile_from_path</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">D</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-es.html#SP12">&#167;12</a>.</li></ul>
@ -1058,7 +1058,7 @@ then its sentences will go to the extension's own tree.
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::document</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Extensions::document</span></span>:<br/>Extension Manager - <a href="4-em.html#SP10">&#167;10</a><br/>Extension Bundle Manager - <a href="4-ebm.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dest</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SVEXPLAIN</span><span class="plain-syntax">(1, </span><span class="string-syntax">"(documenting %X to %p)\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">, </span><span class="identifier-syntax">dest</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax"> = </span><a href="5-es.html#SP12" class="function-link"><span class="function-syntax">Extensions::get_documentation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP3" class="function-link"><span class="function-syntax">DocumentationRenderer::as_HTML</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">dest</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP2" class="function-link"><span class="function-syntax">DocumentationRenderer::as_HTML</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">dest</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. </b>When the extension source text was read from its <span class="extract"><span class="extract-syntax">source_file</span></span>, we

View file

@ -257,7 +257,7 @@ on each heading in sequence:
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">heading</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure heading is accessed in 1/sm, 3/bs2, 6/inc, 7/dt, 7/dr and here.</li></ul>
<ul class="endnotetexts"><li>The structure heading is accessed in 1/sm, 3/bs2, 6/inc, 7/dr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>It is guaranteed that this will be called once for each heading (except the
pseudo-heading, which doesn't count) in sequence order:
</p>

View file

@ -60,7 +60,7 @@ function togglePopup(material_id) {
<p class="purpose">To compile documentation from the textual syntax in an extension into a tree.</p>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>We will actually wrap the result in the following structure, but
it's really not much more than the tree produced by <a href="7-dt.html" class="internal">Documentation Tree</a>:
it's really not much more than a tree of Markdown:
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -69,7 +69,7 @@ it's really not much more than the tree produced by <a href="7-dt.html" class="i
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">original</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">associated_extension</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">within_extension</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">heterogeneous_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tree</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">alt_tree</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">total_headings</span><span class="plain-syntax">[3];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">total_examples</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">empty</span><span class="plain-syntax">;</span>
@ -77,13 +77,13 @@ it's really not much more than the tree produced by <a href="7-dt.html" class="i
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationCompiler::new_wrapper</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">DocumentationCompiler::new_wrapper</span></span>:<br/><a href="7-dc.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">source</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationCompiler::new_wrapper</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">DocumentationCompiler::new_wrapper</span></span>:<br/><a href="7-dc.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">source</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">original</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">source</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">associated_extension</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">within_extension</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP1" class="function-link"><span class="function-syntax">DocumentationTree::new</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">alt_tree</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_examples</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[0] = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[1] = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
@ -105,27 +105,52 @@ it's really not much more than the tree produced by <a href="7-dt.html" class="i
<span class="plain-syntax">} </span><span class="reserved-syntax">satellite_test_case</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure compiled_documentation is accessed in 2/wrk, 2/edt, 2/cps, 2/rqr, 2/jm, 3/bg, 3/is, 4/ebm, 4/km, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/ks, 5/ls, 5/ps2, 6/inc, 7/tm, 7/eip, 7/ti, 7/tc, 7/dr and here.</li><li>The structure satellite_test_case is accessed in 5/ks and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>We can compile either from a file...
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>Lettered examples have a "difficulty rating" in stars, 0 to 4. Numbers are unique
from 1, 2, ...; letters are unique from A, B, C, ...
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationCompiler::compile_from_path</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">DocumentationCompiler::compile_from_path</span></span>:<br/>Extension Services - <a href="5-es.html#SP12_1">&#167;12.1</a><br/>The Mini-Website - <a href="7-tm.html#SP7_1_2">&#167;7.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_example</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">description</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">star_count</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> </span><span class="identifier-syntax">letter</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">cdoc_example</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">cdoc_example</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationCompiler::new_example_alone</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">DocumentationCompiler::new_example_alone</span></span>:<br/><a href="7-dc.html#SP3_1_2">&#167;3.1.2</a><br/>Documentation in Markdown - <a href="7-dim.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">desc</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">star_count</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ecount</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_example</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">cdoc_example</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">description</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">desc</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">star_count</span><span class="plain-syntax"> = </span><span class="identifier-syntax">star_count</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">number</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ecount</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">letter</span><span class="plain-syntax"> = </span><span class="character-syntax">'A'</span><span class="plain-syntax"> + (</span><span class="reserved-syntax">char</span><span class="plain-syntax">) </span><span class="identifier-syntax">ecount</span><span class="plain-syntax"> - </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure cdoc_example is accessed in 3/bs2, 7/dr, 7/dim and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>We can compile either from a file...
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationCompiler::compile_from_path</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">DocumentationCompiler::compile_from_path</span></span>:<br/>Extension Services - <a href="5-es.html#SP12_1">&#167;12.1</a><br/>The Mini-Website - <a href="7-tm.html#SP7_1_2">&#167;7.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">associated_extension</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Documentation.txt"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TextFiles::exists</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP5" class="function-link"><span class="function-syntax">DocumentationCompiler::compile_from_file</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">associated_extension</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP6" class="function-link"><span class="function-syntax">DocumentationCompiler::compile_from_file</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">associated_extension</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cd</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">EP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Examples"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">egs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Scan EP directory for examples</span><span class="named-paragraph-number">2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Scan EP directory for examples</span><span class="named-paragraph-number">3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">egs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Tests"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Scan EP directory for examples</span><span class="named-paragraph-number">2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Scan EP directory for examples</span><span class="named-paragraph-number">3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2_1" class="paragraph-anchor"></a><b>&#167;2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Scan EP directory for examples</span><span class="named-paragraph-number">2.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP3_1" class="paragraph-anchor"></a><b>&#167;3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Scan EP directory for examples</span><span class="named-paragraph-number">3.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -158,7 +183,7 @@ it's really not much more than the tree produced by <a href="7-dt.html" class="i
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TextFiles::exists</span><span class="plain-syntax">(</span><span class="identifier-syntax">IF</span><span class="plain-syntax">)) </span><span class="identifier-syntax">stc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ideal_transcript</span><span class="plain-syntax"> = </span><span class="identifier-syntax">IF</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">ideal_leafname</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">stc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">is_example</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_2" class="named-paragraph-link"><span class="named-paragraph">Scan the example for its header and content</span><span class="named-paragraph-number">2.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP3_1_2" class="named-paragraph-link"><span class="named-paragraph">Scan the example for its header and content</span><span class="named-paragraph-number">3.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">, </span><span class="reserved-syntax">satellite_test_case</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">cases</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
@ -166,8 +191,8 @@ it's really not much more than the tree produced by <a href="7-dt.html" class="i
<span class="plain-syntax"> </span><span class="identifier-syntax">Directories::close</span><span class="plain-syntax">(</span><span class="identifier-syntax">D</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP2">&#167;2</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1_1" class="paragraph-anchor"></a><b>&#167;2.1.1. </b></p>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP3">&#167;3</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP3_1_1" class="paragraph-anchor"></a><b>&#167;3.1.1. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">example_scanning_state</span><span class="plain-syntax"> {</span>
@ -176,14 +201,13 @@ it's really not much more than the tree produced by <a href="7-dt.html" class="i
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">body_text</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">placement</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">desc</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">errors</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">heterogeneous_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tree</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">errors</span><span class="plain-syntax">; </span><span class="comment-syntax"> of </span><span class="extract"><span class="extract-syntax">markdown_item</span></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">scanning</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">past_header</span><span class="plain-syntax">;</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">example_scanning_state</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure example_scanning_state is accessed in 5/es, 7/tc, 7/dt, 7/dr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1_2" class="paragraph-anchor"></a><b>&#167;2.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Scan the example for its header and content</span><span class="named-paragraph-number">2.1.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>The structure example_scanning_state is accessed in 5/es, 7/tc, 7/dim and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_1_2" class="paragraph-anchor"></a><b>&#167;3.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Scan the example for its header and content</span><span class="named-paragraph-number">3.1.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -193,67 +217,75 @@ it's really not much more than the tree produced by <a href="7-dt.html" class="i
<span class="plain-syntax"> </span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="element-syntax">body_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="element-syntax">placement</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="element-syntax">desc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="element-syntax">errors</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="element-syntax">tree</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="element-syntax">errors</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="element-syntax">past_header</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="element-syntax">scanning</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">(); </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="element-syntax">scanning</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Filenames::get_leafname</span><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">test_file</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TextFiles::read</span><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">test_file</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"unable to read file of example"</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><a href="7-dc.html#SP4" class="function-link"><span class="function-syntax">DocumentationCompiler::read_example_helper</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">ess</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> &amp;</span><a href="7-dc.html#SP5" class="function-link"><span class="function-syntax">DocumentationCompiler::read_example_helper</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">ess</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">placement_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">alt_placement_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="element-syntax">placement</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">placement_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">root</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> ;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">placement_node</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP16" class="function-link"><span class="function-syntax">DocumentationTree::find_section</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="element-syntax">placement</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">placement_node</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP3" class="function-link"><span class="function-syntax">DocumentationCompiler::example_error</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">ess</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">alt_placement_node</span><span class="plain-syntax"> = </span><a href="7-dim.html#SP6" class="function-link"><span class="function-syntax">DocumentationInMarkdown::find_section</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">alt_tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="element-syntax">placement</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Looking for %S.\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="identifier-syntax">placement</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">alt_placement_node</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP4" class="function-link"><span class="function-syntax">DocumentationCompiler::example_error</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">ess</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"example gives a Location which is not the name of any section"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="element-syntax">desc</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP3" class="function-link"><span class="function-syntax">DocumentationCompiler::example_error</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">ess</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP4" class="function-link"><span class="function-syntax">DocumentationCompiler::example_error</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">ess</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"example does not give its Description"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">content_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="element-syntax">body_text</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP3" class="function-link"><span class="function-syntax">DocumentationCompiler::example_error</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">ess</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"example does not give any actual content"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ecd</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP6" class="function-link"><span class="function-syntax">DocumentationCompiler::compile</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="element-syntax">body_text</span><span class="plain-syntax">, </span><span class="identifier-syntax">associated_extension</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">ecd</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">ecd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">ecd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">root</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">ecd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">root</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">ecd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">root</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">passage_TNT</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">content_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ecd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">root</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP3" class="function-link"><span class="function-syntax">DocumentationCompiler::example_error</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">ess</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"example file content is missing or wrongly set out"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">example_node</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP5" class="function-link"><span class="function-syntax">DocumentationTree::new_example</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_example</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eg</span><span class="plain-syntax"> = </span><a href="7-dc.html#SP2" class="function-link"><span class="function-syntax">DocumentationCompiler::new_example_alone</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="element-syntax">long_title</span><span class="plain-syntax">, </span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="element-syntax">desc</span><span class="plain-syntax">, </span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="element-syntax">star_count</span><span class="plain-syntax">, ++(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_examples</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">placement_node</span><span class="plain-syntax">) </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">example_node</span><span class="plain-syntax">, </span><span class="identifier-syntax">placement_node</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">content_node</span><span class="plain-syntax">) </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">content_node</span><span class="plain-syntax">, </span><span class="identifier-syntax">example_node</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax">, </span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="element-syntax">errors</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tree</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">root</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP2_1">&#167;2.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eg_header</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Markdown::new_item</span><span class="plain-syntax">(</span><span class="constant-syntax">INFORM_EXAMPLE_HEADING_MIT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">eg_header</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">user_state</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_cdoc_example</span><span class="plain-syntax">(</span><span class="identifier-syntax">eg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">md</span><span class="plain-syntax"> = </span><span class="identifier-syntax">alt_placement_node</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">md</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">md</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">alt_tree</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">md</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">alt_tree</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax"> = </span><span class="identifier-syntax">eg_header</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">md</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">)) </span><span class="identifier-syntax">md</span><span class="plain-syntax"> = </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">eg_header</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">; </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">eg_header</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) </span><span class="identifier-syntax">md</span><span class="plain-syntax"> = </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">md</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> != </span><span class="identifier-syntax">HEADING_MIT</span><span class="plain-syntax">)) </span><span class="identifier-syntax">md</span><span class="plain-syntax"> = </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">eg_header</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">; </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">eg_header</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="element-syntax">body_text</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">alt_ecd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Markdown::parse_extended</span><span class="plain-syntax">(</span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="element-syntax">body_text</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="7-dim.html#SP1" class="function-link"><span class="function-syntax">DocumentationInMarkdown::extension_flavoured_Markdown</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">eg_header</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax"> = </span><span class="identifier-syntax">alt_ecd</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Markdown::debug_subtree</span><span class="plain-syntax">(</span><span class="identifier-syntax">DL</span><span class="plain-syntax">, </span><span class="identifier-syntax">eg_header</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP4" class="function-link"><span class="function-syntax">DocumentationCompiler::example_error</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">ess</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"example does not give any actual content"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationCompiler::example_error</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">DocumentationCompiler::example_error</span></span>:<br/><a href="7-dc.html#SP2_1_2">&#167;2.1.2</a>, <a href="7-dc.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">example_scanning_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ess</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">err</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="string-syntax">"Example file '%S': %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ess</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">scanning</span><span class="plain-syntax">, </span><span class="identifier-syntax">text</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP15" class="function-link"><span class="function-syntax">DocumentationTree::new_source_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ess</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">err</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax">, </span><span class="identifier-syntax">ess</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">errors</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax">, </span><span class="identifier-syntax">ess</span><span class="plain-syntax">.</span><span class="element-syntax">errors</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Markdown::add_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">alt_tree</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP3_1">&#167;3.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationCompiler::read_example_helper</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">DocumentationCompiler::read_example_helper</span></span>:<br/><a href="7-dc.html#SP2_1_2">&#167;2.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationCompiler::example_error</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">DocumentationCompiler::example_error</span></span>:<br/><a href="7-dc.html#SP3_1_2">&#167;3.1.2</a>, <a href="7-dc.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">example_scanning_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ess</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">err</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="string-syntax">"Example file '%S': %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ess</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">scanning</span><span class="plain-syntax">, </span><span class="identifier-syntax">text</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="7-dim.html#SP2" class="function-link"><span class="function-syntax">DocumentationInMarkdown::error_item</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax">, </span><span class="identifier-syntax">ess</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">errors</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationCompiler::read_example_helper</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">DocumentationCompiler::read_example_helper</span></span>:<br/><a href="7-dc.html#SP3_1_2">&#167;3.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">v_state</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">example_scanning_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ess</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">example_scanning_state</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">v_state</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">line_count</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
@ -262,18 +294,18 @@ it's really not much more than the tree produced by <a href="7-dt.html" class="i
<span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Example *- *(%**) *(%c+?)"</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ess</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">star_count</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ess</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">star_count</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP3" class="function-link"><span class="function-syntax">DocumentationCompiler::example_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ess</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP4" class="function-link"><span class="function-syntax">DocumentationCompiler::example_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ess</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"this example should be marked (before the title) '*', '**', '***' or '****' for difficulty"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ess</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">star_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ess</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">star_count</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">4</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP3" class="function-link"><span class="function-syntax">DocumentationCompiler::example_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ess</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP4" class="function-link"><span class="function-syntax">DocumentationCompiler::example_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ess</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"four stars '****' is the maximum difficulty rating allowed"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ess</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">star_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ess</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">long_title</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1]);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP3" class="function-link"><span class="function-syntax">DocumentationCompiler::example_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ess</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP4" class="function-link"><span class="function-syntax">DocumentationCompiler::example_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ess</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"titling line of example file is malformed"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Regexp::dispose_of</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
@ -284,11 +316,11 @@ it's really not much more than the tree produced by <a href="7-dt.html" class="i
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Location"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">ess</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">placement</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Description"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">ess</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">desc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP3" class="function-link"><span class="function-syntax">DocumentationCompiler::example_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ess</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP4" class="function-link"><span class="function-syntax">DocumentationCompiler::example_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ess</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"unknown datum in header line of example file"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP3" class="function-link"><span class="function-syntax">DocumentationCompiler::example_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ess</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP4" class="function-link"><span class="function-syntax">DocumentationCompiler::example_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ess</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"header line of example file is malformed"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Regexp::dispose_of</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
@ -297,16 +329,16 @@ it's really not much more than the tree produced by <a href="7-dt.html" class="i
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b></p>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationCompiler::compile_from_file</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">DocumentationCompiler::compile_from_file</span></span>:<br/><a href="7-dc.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationCompiler::compile_from_file</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">DocumentationCompiler::compile_from_file</span></span>:<br/><a href="7-dc.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">associated_extension</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">temp</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TextFiles::read</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"unable to read file of documentation"</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><a href="7-dc.html#SP5" class="function-link"><span class="function-syntax">DocumentationCompiler::read_file_helper</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">temp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> &amp;</span><a href="7-dc.html#SP6" class="function-link"><span class="function-syntax">DocumentationCompiler::read_file_helper</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">temp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP6" class="function-link"><span class="function-syntax">DocumentationCompiler::compile</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">temp</span><span class="plain-syntax">, </span><span class="identifier-syntax">associated_extension</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP7" class="function-link"><span class="function-syntax">DocumentationCompiler::compile</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">temp</span><span class="plain-syntax">, </span><span class="identifier-syntax">associated_extension</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">temp</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -317,11 +349,11 @@ it's really not much more than the tree produced by <a href="7-dt.html" class="i
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">contents</span><span class="plain-syntax">, </span><span class="string-syntax">"%S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">text</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>...or from text:
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>...or from text:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationCompiler::compile</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">DocumentationCompiler::compile</span></span>:<br/><a href="7-dc.html#SP2_1_2">&#167;2.1.2</a>, <a href="7-dc.html#SP5">&#167;5</a><br/>Extension Services - <a href="5-es.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">source</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationCompiler::compile</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">DocumentationCompiler::compile</span></span>:<br/><a href="7-dc.html#SP6">&#167;6</a><br/>Extension Services - <a href="5-es.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">source</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">associated_extension</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SVEXPLAIN</span><span class="plain-syntax">(1, </span><span class="string-syntax">"(compiling documentation: %d chars)\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">source</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax"> = </span><a href="7-dc.html#SP1" class="function-link"><span class="function-syntax">DocumentationCompiler::new_wrapper</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">source</span><span class="plain-syntax">);</span>
@ -329,442 +361,15 @@ it's really not much more than the tree produced by <a href="7-dt.html" class="i
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">associated_extension</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">, </span><span class="string-syntax">"%X"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">associated_extension</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::is_whitespace</span><span class="plain-syntax">(</span><span class="identifier-syntax">source</span><span class="plain-syntax">)) </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">empty</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1" class="named-paragraph-link"><span class="named-paragraph">Parse the source</span><span class="named-paragraph-number">6.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">empty</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SVEXPLAIN</span><span class="plain-syntax">(1, </span><span class="string-syntax">"(resulting tree is empty)\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SVEXPLAIN</span><span class="plain-syntax">(1, </span><span class="string-syntax">"(resulting tree has %d chapter(s), %d section(s) and %d example(s))\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[2], </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_examples</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">alt_tree</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Markdown::parse_extended</span><span class="plain-syntax">(</span><span class="identifier-syntax">source</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="7-dim.html#SP1" class="function-link"><span class="function-syntax">DocumentationInMarkdown::extension_flavoured_Markdown</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6_1" class="paragraph-anchor"></a><b>&#167;6.1. </b>The source material is line-based, with semantic content sometimes spreading
across multiple lines, so we'll need to keep track of some state as we read
one line at a time:
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse the source</span><span class="named-paragraph-number">6.1</span></span><span class="comment-syntax"> =</span>
</p>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">chapter_number</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">section_number</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">current_headings</span><span class="plain-syntax">[4]; </span><span class="comment-syntax"> Most recent headings of levels 0, 1, 2</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_headings</span><span class="plain-syntax">[0] = </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">root</span><span class="plain-syntax">; </span><span class="comment-syntax"> This will never change</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_headings</span><span class="plain-syntax">[1] = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> Latest chapter, if any</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_headings</span><span class="plain-syntax">[2] = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> Latest section in most recent thing of lower level</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_headings</span><span class="plain-syntax">[3] = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> Latest example in most recent thing of lower level</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">current_passage</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="comment-syntax"> passage being assembled, if any</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">current_phrase_defn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="comment-syntax"> again, if any</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">current_paragraph</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">current_code</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">last_paste_code</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> last code sample with a paste button</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pending_code_sample_blanks</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">code_is_tabular</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="comment-syntax"> used only when assembling code samples</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">programming_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">default_language</span><span class="plain-syntax"> = </span><a href="7-dc.html#SP7" class="function-link"><span class="function-syntax">DocumentationCompiler::get_language</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"Inform"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">programming_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">language</span><span class="plain-syntax"> = </span><span class="identifier-syntax">default_language</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1" class="named-paragraph-link"><span class="named-paragraph">Parse the source linewise</span><span class="named-paragraph-number">6.1.1</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1_1" class="paragraph-anchor"></a><b>&#167;6.1.1. </b>Leading space on a line is removed but not ignored: it is converted into an
indentation level, measured as a tab count, using the exchange rate 4 spaces
to 1 tab.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse the source linewise</span><span class="named-paragraph-number">6.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">indentation</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">space_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">source</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">source</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\n'</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Line read</span><span class="named-paragraph-number">6.1.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">indentation</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">space_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Characters::is_whitespace</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\t'</span><span class="plain-syntax">) </span><span class="identifier-syntax">indentation</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">' '</span><span class="plain-syntax">) </span><span class="identifier-syntax">space_count</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">space_count</span><span class="plain-syntax"> == </span><span class="constant-syntax">4</span><span class="plain-syntax">) { </span><span class="identifier-syntax">indentation</span><span class="plain-syntax">++; </span><span class="identifier-syntax">space_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Line read</span><span class="named-paragraph-number">6.1.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Check for runaway phrase definitions</span><span class="named-paragraph-number">6.1.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_3" class="named-paragraph-link"><span class="named-paragraph">Complete passage if in one</span><span class="named-paragraph-number">6.1.1.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">)</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP6_1">&#167;6.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1_1_1" class="paragraph-anchor"></a><b>&#167;6.1.1.1. </b>Trailing space is ignored and removed.
</p>
<p class="commentary">Lines which are unindented and take the following shapes are headings:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> Chapter: Survey and Prospecting</span>
<span class="plain-syntax"> Section: Black Gold</span>
<span class="plain-syntax"> Example: *** Gelignite Anderson - A Tale of the Texas Oilmen</span>
</pre>
<p class="commentary">where in each case the colon can equally be a hyphen, and with optional
space either side.
</p>
<p class="commentary">Otherwise, lines are divided into blanks, which always end paragraphs but
may either end or continue code samples; unindented lines, which are always
part of paragraphs; or indented ones, which are always part of code samples.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Line read</span><span class="named-paragraph-number">6.1.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::trim_white_space</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_paragraph</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_7" class="named-paragraph-link"><span class="named-paragraph">Complete paragraph or code</span><span class="named-paragraph-number">6.1.1.1.7</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_code</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_12" class="named-paragraph-link"><span class="named-paragraph">Insert line break in code</span><span class="named-paragraph-number">6.1.1.1.12</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">indentation</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Regexp::create_mr</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Section *: *(%c+?)"</span><span class="plain-syntax">)) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Section *- *(%c+?)"</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Insert a section heading</span><span class="named-paragraph-number">6.1.1.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Chapter *: *(%c+?)"</span><span class="plain-syntax">)) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Chapter *- *(%c+?)"</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Insert a chapter heading</span><span class="named-paragraph-number">6.1.1.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Example *: *(%**) *(%c+?)"</span><span class="plain-syntax">)) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Example *- *(%**) *(%c+?)"</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_3" class="named-paragraph-link"><span class="named-paragraph">Insert an example heading</span><span class="named-paragraph-number">6.1.1.1.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"{defn *(%c*?)} *(%c+)"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_4" class="named-paragraph-link"><span class="named-paragraph">Begin a phrase definition</span><span class="named-paragraph-number">6.1.1.1.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"{end}"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_5" class="named-paragraph-link"><span class="named-paragraph">End a phrase definition</span><span class="named-paragraph-number">6.1.1.1.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_paragraph</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_8" class="named-paragraph-link"><span class="named-paragraph">Begin paragraph</span><span class="named-paragraph-number">6.1.1.1.8</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_9" class="named-paragraph-link"><span class="named-paragraph">Insert space in paragraph</span><span class="named-paragraph-number">6.1.1.1.9</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_10" class="named-paragraph-link"><span class="named-paragraph">Insert line in paragraph</span><span class="named-paragraph-number">6.1.1.1.10</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Regexp::dispose_of</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_code</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">) == </span><span class="character-syntax">'{'</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">) == </span><span class="character-syntax">'a'</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">) == </span><span class="character-syntax">'s'</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">) == </span><span class="character-syntax">' '</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">)-1) == </span><span class="character-syntax">'}'</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_n_characters</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_last_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::trim_white_space</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">language</span><span class="plain-syntax"> = </span><a href="7-dc.html#SP7" class="function-link"><span class="function-syntax">DocumentationCompiler::get_language</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">language</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_7" class="named-paragraph-link"><span class="named-paragraph">Complete paragraph or code</span><span class="named-paragraph-number">6.1.1.1.7</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_6" class="named-paragraph-link"><span class="named-paragraph">Begin passage if not already in one</span><span class="named-paragraph-number">6.1.1.1.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="string-syntax">"cannot find a language called '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP15" class="function-link"><span class="function-syntax">DocumentationTree::new_source_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">err</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_passage</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_11" class="named-paragraph-link"><span class="named-paragraph">Begin code</span><span class="named-paragraph-number">6.1.1.1.11</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_13" class="named-paragraph-link"><span class="named-paragraph">Insert line in code sample</span><span class="named-paragraph-number">6.1.1.1.13</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_13" class="named-paragraph-link"><span class="named-paragraph">Insert line in code sample</span><span class="named-paragraph-number">6.1.1.1.13</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP6_1_1">&#167;6.1.1</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1_1_1_1" class="paragraph-anchor"></a><b>&#167;6.1.1.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Insert a chapter heading</span><span class="named-paragraph-number">6.1.1.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_3" class="named-paragraph-link"><span class="named-paragraph">Complete passage if in one</span><span class="named-paragraph-number">6.1.1.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">chapter_number</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">section_number</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[0] + </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[1] + </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[2];</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[1]++;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_node</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP3" class="function-link"><span class="function-syntax">DocumentationTree::new_heading</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">level</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">chapter_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">section_number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Place this new structural node in the tree</span><span class="named-paragraph-number">6.1.1.1.1.1</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP6_1_1_1">&#167;6.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1_1_1_2" class="paragraph-anchor"></a><b>&#167;6.1.1.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Insert a section heading</span><span class="named-paragraph-number">6.1.1.1.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_3" class="named-paragraph-link"><span class="named-paragraph">Complete passage if in one</span><span class="named-paragraph-number">6.1.1.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">section_number</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[0] + </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[1] + </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[2];</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[2]++;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_node</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP3" class="function-link"><span class="function-syntax">DocumentationTree::new_heading</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">level</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">chapter_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">section_number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Place this new structural node in the tree</span><span class="named-paragraph-number">6.1.1.1.1.1</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP6_1_1_1">&#167;6.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1_1_1_3" class="paragraph-anchor"></a><b>&#167;6.1.1.1.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Insert an example heading</span><span class="named-paragraph-number">6.1.1.1.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_3" class="named-paragraph-link"><span class="named-paragraph">Complete passage if in one</span><span class="named-paragraph-number">6.1.1.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax"> = </span><span class="constant-syntax">3</span><span class="plain-syntax">, </span><span class="identifier-syntax">star_count</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0]);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_node</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP5" class="function-link"><span class="function-syntax">DocumentationTree::new_example</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">star_count</span><span class="plain-syntax">, ++(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_examples</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Place this new structural node in the tree</span><span class="named-paragraph-number">6.1.1.1.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">star_count</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_6" class="named-paragraph-link"><span class="named-paragraph">Begin passage if not already in one</span><span class="named-paragraph-number">6.1.1.1.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP15" class="function-link"><span class="function-syntax">DocumentationTree::new_source_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"this example should be marked (before the title) '*', '**', '***' or '****' for difficulty"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_passage</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">star_count</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">4</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_6" class="named-paragraph-link"><span class="named-paragraph">Begin passage if not already in one</span><span class="named-paragraph-number">6.1.1.1.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP15" class="function-link"><span class="function-syntax">DocumentationTree::new_source_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"four stars '****' is the maximum difficulty rating allowed"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_passage</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP6_1_1_1">&#167;6.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1_1_1_4" class="paragraph-anchor"></a><b>&#167;6.1.1.1.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin a phrase definition</span><span class="named-paragraph-number">6.1.1.1.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Check for runaway phrase definitions</span><span class="named-paragraph-number">6.1.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_phrase_defn</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_6" class="named-paragraph-link"><span class="named-paragraph">Begin passage if not already in one</span><span class="named-paragraph-number">6.1.1.1.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_7" class="named-paragraph-link"><span class="named-paragraph">Complete paragraph or code</span><span class="named-paragraph-number">6.1.1.1.7</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_phrase_defn</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="7-dt.html#SP9" class="function-link"><span class="function-syntax">DocumentationTree::new_phrase_defn</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1]);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_phrase_defn</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_passage</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_3" class="named-paragraph-link"><span class="named-paragraph">Complete passage if in one</span><span class="named-paragraph-number">6.1.1.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP6_1_1_1">&#167;6.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1_1_1_5" class="paragraph-anchor"></a><b>&#167;6.1.1.1.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">End a phrase definition</span><span class="named-paragraph-number">6.1.1.1.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_phrase_defn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_3" class="named-paragraph-link"><span class="named-paragraph">Complete passage if in one</span><span class="named-paragraph-number">6.1.1.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_passage</span><span class="plain-syntax"> = </span><span class="identifier-syntax">current_phrase_defn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parent</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_phrase_defn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_6" class="named-paragraph-link"><span class="named-paragraph">Begin passage if not already in one</span><span class="named-paragraph-number">6.1.1.1.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP15" class="function-link"><span class="function-syntax">DocumentationTree::new_source_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"{end} without {defn}"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_passage</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">language</span><span class="plain-syntax"> = </span><span class="identifier-syntax">default_language</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP6_1_1_1">&#167;6.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1_1_1_1_1" class="paragraph-anchor"></a><b>&#167;6.1.1.1.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Place this new structural node in the tree</span><span class="named-paragraph-number">6.1.1.1.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Check for runaway phrase definitions</span><span class="named-paragraph-number">6.1.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">j</span><span class="plain-syntax">=</span><span class="identifier-syntax">level</span><span class="plain-syntax">-1; </span><span class="identifier-syntax">j</span><span class="plain-syntax">&gt;=0; </span><span class="identifier-syntax">j</span><span class="plain-syntax">--)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_headings</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">]) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">new_node</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_headings</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_headings</span><span class="plain-syntax">[</span><span class="identifier-syntax">level</span><span class="plain-syntax">] = </span><span class="identifier-syntax">new_node</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">j</span><span class="plain-syntax">=</span><span class="identifier-syntax">level</span><span class="plain-syntax">+1; </span><span class="identifier-syntax">j</span><span class="plain-syntax">&lt;4; </span><span class="identifier-syntax">j</span><span class="plain-syntax">++) </span><span class="identifier-syntax">current_headings</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">] = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">language</span><span class="plain-syntax"> = </span><span class="identifier-syntax">default_language</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP6_1_1_1_1">&#167;6.1.1.1.1</a>, <a href="7-dc.html#SP6_1_1_1_2">&#167;6.1.1.1.2</a>, <a href="7-dc.html#SP6_1_1_1_3">&#167;6.1.1.1.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1_1_2" class="paragraph-anchor"></a><b>&#167;6.1.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check for runaway phrase definitions</span><span class="named-paragraph-number">6.1.1.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_phrase_defn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_6" class="named-paragraph-link"><span class="named-paragraph">Begin passage if not already in one</span><span class="named-paragraph-number">6.1.1.1.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP15" class="function-link"><span class="function-syntax">DocumentationTree::new_source_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"{defn} has no {end}"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_passage</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_phrase_defn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP6_1_1">&#167;6.1.1</a>, <a href="7-dc.html#SP6_1_1_1_4">&#167;6.1.1.1.4</a>, <a href="7-dc.html#SP6_1_1_1_1_1">&#167;6.1.1.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1_1_1_6" class="paragraph-anchor"></a><b>&#167;6.1.1.1.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin passage if not already in one</span><span class="named-paragraph-number">6.1.1.1.6</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_passage</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_passage</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP7" class="function-link"><span class="function-syntax">DocumentationTree::new_passage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_phrase_defn</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_passage</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_phrase_defn</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">j</span><span class="plain-syntax">=3; </span><span class="identifier-syntax">j</span><span class="plain-syntax">&gt;=0; </span><span class="identifier-syntax">j</span><span class="plain-syntax">--)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_headings</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">]) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_passage</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_headings</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_paragraph</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP6_1_1_1">&#167;6.1.1.1</a>, <a href="7-dc.html#SP6_1_1_1_3">&#167;6.1.1.1.3</a> (twice), <a href="7-dc.html#SP6_1_1_1_4">&#167;6.1.1.1.4</a>, <a href="7-dc.html#SP6_1_1_1_5">&#167;6.1.1.1.5</a>, <a href="7-dc.html#SP6_1_1_2">&#167;6.1.1.2</a>, <a href="7-dc.html#SP6_1_1_1_8">&#167;6.1.1.1.8</a>, <a href="7-dc.html#SP6_1_1_1_11">&#167;6.1.1.1.11</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1_1_3" class="paragraph-anchor"></a><b>&#167;6.1.1.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Complete passage if in one</span><span class="named-paragraph-number">6.1.1.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_passage</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_7" class="named-paragraph-link"><span class="named-paragraph">Complete paragraph or code</span><span class="named-paragraph-number">6.1.1.1.7</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_passage</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP6_1_1">&#167;6.1.1</a>, <a href="7-dc.html#SP6_1_1_1_1">&#167;6.1.1.1.1</a>, <a href="7-dc.html#SP6_1_1_1_2">&#167;6.1.1.1.2</a>, <a href="7-dc.html#SP6_1_1_1_3">&#167;6.1.1.1.3</a>, <a href="7-dc.html#SP6_1_1_1_4">&#167;6.1.1.1.4</a>, <a href="7-dc.html#SP6_1_1_1_5">&#167;6.1.1.1.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1_1_1_7" class="paragraph-anchor"></a><b>&#167;6.1.1.1.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Complete paragraph or code</span><span class="named-paragraph-number">6.1.1.1.7</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_paragraph</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_7_1" class="named-paragraph-link"><span class="named-paragraph">Complete paragraph</span><span class="named-paragraph-number">6.1.1.1.7.1</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_code</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_7_2" class="named-paragraph-link"><span class="named-paragraph">Complete code</span><span class="named-paragraph-number">6.1.1.1.7.2</span></a></span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP6_1_1_1">&#167;6.1.1.1</a> (twice), <a href="7-dc.html#SP6_1_1_1_4">&#167;6.1.1.1.4</a>, <a href="7-dc.html#SP6_1_1_3">&#167;6.1.1.3</a>, <a href="7-dc.html#SP6_1_1_1_8">&#167;6.1.1.1.8</a>, <a href="7-dc.html#SP6_1_1_1_11">&#167;6.1.1.1.11</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1_1_1_8" class="paragraph-anchor"></a><b>&#167;6.1.1.1.8. </b>Line breaks are treated as spaces in the content of a paragraph, so that
<span class="extract"><span class="extract-syntax">P-&gt;content</span></span> here can be a long text but one which contains no line breaks.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin paragraph</span><span class="named-paragraph-number">6.1.1.1.8</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_7" class="named-paragraph-link"><span class="named-paragraph">Complete paragraph or code</span><span class="named-paragraph-number">6.1.1.1.7</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_6" class="named-paragraph-link"><span class="named-paragraph">Begin passage if not already in one</span><span class="named-paragraph-number">6.1.1.1.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_paragraph</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP11" class="function-link"><span class="function-syntax">DocumentationTree::new_paragraph</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_paragraph</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_passage</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP6_1_1_1">&#167;6.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1_1_1_9" class="paragraph-anchor"></a><b>&#167;6.1.1.1.9. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Insert space in paragraph</span><span class="named-paragraph-number">6.1.1.1.9</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_paragraph</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_paragraph</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_paragraph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">, </span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP6_1_1_1">&#167;6.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1_1_1_10" class="paragraph-anchor"></a><b>&#167;6.1.1.1.10. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Insert line in paragraph</span><span class="named-paragraph-number">6.1.1.1.10</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_paragraph</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_paragraph</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_paragraph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP6_1_1_1">&#167;6.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1_1_1_7_1" class="paragraph-anchor"></a><b>&#167;6.1.1.1.7.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Complete paragraph</span><span class="named-paragraph-number">6.1.1.1.7.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_paragraph</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_paragraph</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP6_1_1_1_7">&#167;6.1.1.1.7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1_1_1_11" class="paragraph-anchor"></a><b>&#167;6.1.1.1.11. </b>Line breaks are more significant in code samples, of course. Blank lines
at the end of a code sample are stripped out; and they cannot appear at the start
of a code sample either, since a non-blank indented line is needed to trigger one.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin code</span><span class="named-paragraph-number">6.1.1.1.11</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_7" class="named-paragraph-link"><span class="named-paragraph">Complete paragraph or code</span><span class="named-paragraph-number">6.1.1.1.7</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP6_1_1_1_6" class="named-paragraph-link"><span class="named-paragraph">Begin passage if not already in one</span><span class="named-paragraph-number">6.1.1.1.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">paste_me</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">continue_me</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">) == </span><span class="character-syntax">'*'</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">) == </span><span class="character-syntax">':'</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::trim_white_space</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">paste_me</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">) == </span><span class="character-syntax">'*'</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">) == </span><span class="character-syntax">'*'</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">) == </span><span class="character-syntax">':'</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::trim_white_space</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">continue_me</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">) == </span><span class="character-syntax">'{'</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">) == </span><span class="character-syntax">'*'</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">) == </span><span class="character-syntax">'}'</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::trim_white_space</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">paste_me</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">) == </span><span class="character-syntax">'{'</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">) == </span><span class="character-syntax">'*'</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">) == </span><span class="character-syntax">'*'</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">) == </span><span class="character-syntax">'}'</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::trim_white_space</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">continue_me</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_code</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP12" class="function-link"><span class="function-syntax">DocumentationTree::new_code_sample</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">paste_me</span><span class="plain-syntax">, </span><span class="identifier-syntax">language</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">continue_me</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">last_paste_code</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_code_sample</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_code_sample</span><span class="plain-syntax">(</span><span class="identifier-syntax">last_paste_code</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">continuation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">current_code</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP15" class="function-link"><span class="function-syntax">DocumentationTree::new_source_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"cannot continue a paste here"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_passage</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">paste_me</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">continue_me</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">last_paste_code</span><span class="plain-syntax"> = </span><span class="identifier-syntax">current_code</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">last_paste_code</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_code</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_passage</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pending_code_sample_blanks</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">code_is_tabular</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP6_1_1_1">&#167;6.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1_1_1_12" class="paragraph-anchor"></a><b>&#167;6.1.1.1.12. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Insert line break in code</span><span class="named-paragraph-number">6.1.1.1.12</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_code</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pending_code_sample_blanks</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">code_is_tabular</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP6_1_1_1">&#167;6.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1_1_1_13" class="paragraph-anchor"></a><b>&#167;6.1.1.1.13. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Insert line in code sample</span><span class="named-paragraph-number">6.1.1.1.13</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">pending_code_sample_blanks</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><a href="7-dt.html#SP14" class="function-link"><span class="function-syntax">DocumentationTree::new_code_line</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">), </span><span class="identifier-syntax">current_code</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pending_code_sample_blanks</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Regexp::create_mr</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Table %c*"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">code_is_tabular</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Regexp::dispose_of</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><a href="7-dt.html#SP14" class="function-link"><span class="function-syntax">DocumentationTree::new_code_line</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">indentation</span><span class="plain-syntax">-1, </span><span class="identifier-syntax">code_is_tabular</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_code</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP6_1_1_1">&#167;6.1.1.1</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1_1_1_7_2" class="paragraph-anchor"></a><b>&#167;6.1.1.1.7.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Complete code</span><span class="named-paragraph-number">6.1.1.1.7.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_code</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_code</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">code_is_tabular</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP6_1_1_1_7">&#167;6.1.1.1.7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">programming_language</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationCompiler::get_language</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">DocumentationCompiler::get_language</span></span>:<br/><a href="7-dc.html#SP6_1">&#167;6.1</a>, <a href="7-dc.html#SP6_1_1_1">&#167;6.1.1.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">programming_language</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationCompiler::get_language</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">DocumentationCompiler::get_language</span></span>:<br/>Documentation in Markdown - <a href="7-dim.html#SP7">&#167;7</a>, <a href="7-dim.html#SP7_2">&#167;7.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><a href="1-ic.html#SP16" class="function-link"><span class="function-syntax">Supervisor::internal</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">LP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><a href="2-nst.html#SP5" class="function-link"><span class="function-syntax">Nests::get_location</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="string-syntax">"PLs"</span><span class="plain-syntax">);</span>
@ -775,7 +380,7 @@ of a code sample either, since a non-blank indented line is needed to trigger on
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="7-dt.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresssection"><a href="7-tm.html">tm</a></li><li class="progresssection"><a href="7-eip.html">eip</a></li><li class="progresssection"><a href="7-ti.html">ti</a></li><li class="progresssection"><a href="7-tc.html">tc</a></li><li class="progresssection"><a href="7-dt.html">dt</a></li><li class="progresscurrent">dc</li><li class="progresssection"><a href="7-dr.html">dr</a></li><li class="progressnext"><a href="7-dr.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="7-tc.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresssection"><a href="7-tm.html">tm</a></li><li class="progresssection"><a href="7-eip.html">eip</a></li><li class="progresssection"><a href="7-ti.html">ti</a></li><li class="progresssection"><a href="7-tc.html">tc</a></li><li class="progresscurrent">dc</li><li class="progresssection"><a href="7-dr.html">dr</a></li><li class="progresssection"><a href="7-dim.html">dim</a></li><li class="progressnext"><a href="7-dr.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -0,0 +1,739 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Documentation in Markdown</title>
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
<nav role="navigation">
<h1><a href="../index.html">
<img src="../docs-assets/Inform.png" height=72">
</a></h1>
<ul><li><a href="../index.html">home</a></li>
</ul><h2>Compiler</h2><ul>
<li><a href="../structure.html">structure</a></li>
<li><a href="../inbuildn.html">inbuild</a></li>
<li><a href="../inform7n.html">inform7</a></li>
<li><a href="../intern.html">inter</a></li>
<li><a href="../services.html">services</a></li>
<li><a href="../secrets.html">secrets</a></li>
</ul><h2>Other Tools</h2><ul>
<li><a href="../inblorbn.html">inblorb</a></li>
<li><a href="../indocn.html">indoc</a></li>
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>
<li><a href="../../../inweb/index.html">inweb</a></li>
<li><a href="../../../intest/index.html">intest</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'Documentation in Markdown' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inbuildn.html">Inbuild Modules</a></li><li><a href="index.html">supervisor</a></li><li><a href="index.html#7">Chapter 7: Extension Management</a></li><li><b>Documentation in Markdown</b></li></ul></div>
<p class="purpose">To provide a variation on Markdown for extension documentation.</p>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>Plain CommonMark would not give us the bells and whistles we want, and would
also allow rather more HTML liberty than is a good idea here. So:
</p>
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">INFORM_HEADINGS_MARKDOWNFEATURE</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">PASTE_ICONS_MARKDOWNFEATURE</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="definition-keyword">enum</span> <span class="constant-syntax">INFORM_EXAMPLE_HEADING_MIT</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">INFORM_ERROR_MARKER_MIT</span>
<span class="identifier-syntax">markdown_variation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">extension_flavoured_Markdown</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">markdown_variation</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationInMarkdown::extension_flavoured_Markdown</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">DocumentationInMarkdown::extension_flavoured_Markdown</span></span>:<br/><a href="7-dim.html#SP4">&#167;4</a>, <a href="7-dim.html#SP5">&#167;5</a><br/>Documentation Compiler - <a href="7-dc.html#SP3_1_2">&#167;3.1.2</a>, <a href="7-dc.html#SP7">&#167;7</a><br/>Documentation Renderer - <a href="7-dr.html#SP3">&#167;3</a>, <a href="7-dr.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">extension_flavoured_Markdown</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">extension_flavoured_Markdown</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">extension_flavoured_Markdown</span><span class="plain-syntax"> = </span><span class="identifier-syntax">MarkdownVariations::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"Inform-flavoured Markdown"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">MarkdownVariations::remove_feature</span><span class="plain-syntax">(</span><span class="identifier-syntax">extension_flavoured_Markdown</span><span class="plain-syntax">, </span><span class="identifier-syntax">HTML_BLOCKS_MARKDOWNFEATURE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">MarkdownVariations::remove_feature</span><span class="plain-syntax">(</span><span class="identifier-syntax">extension_flavoured_Markdown</span><span class="plain-syntax">, </span><span class="identifier-syntax">INLINE_HTML_MARKDOWNFEATURE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">Inform_headings</span><span class="plain-syntax"> = </span><span class="identifier-syntax">MarkdownVariations::new_feature</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"Inform_headings"</span><span class="plain-syntax">, </span><span class="constant-syntax">INFORM_HEADINGS_MARKDOWNFEATURE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">Inform_headings</span><span class="plain-syntax">, </span><span class="identifier-syntax">POST_PHASE_I_MARKDOWN_MTID</span><span class="plain-syntax">, </span><a href="7-dim.html#SP2" class="function-link"><span class="function-syntax">DocumentationInMarkdown::Inform_headings_intervene_after_Phase_I</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">MarkdownVariations::add_feature</span><span class="plain-syntax">(</span><span class="identifier-syntax">extension_flavoured_Markdown</span><span class="plain-syntax">, </span><span class="constant-syntax">INFORM_HEADINGS_MARKDOWNFEATURE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">paste_icons</span><span class="plain-syntax"> = </span><span class="identifier-syntax">MarkdownVariations::new_feature</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"paste icons"</span><span class="plain-syntax">, </span><span class="constant-syntax">PASTE_ICONS_MARKDOWNFEATURE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">paste_icons</span><span class="plain-syntax">, </span><span class="identifier-syntax">RENDER_MARKDOWN_MTID</span><span class="plain-syntax">, </span><a href="7-dim.html#SP4" class="function-link"><span class="function-syntax">DocumentationInMarkdown::paste_icons_renderer</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">paste_icons</span><span class="plain-syntax">, </span><span class="identifier-syntax">POST_PHASE_I_MARKDOWN_MTID</span><span class="plain-syntax">, </span><a href="7-dim.html#SP4" class="function-link"><span class="function-syntax">DocumentationInMarkdown::paste_icons_intervene_after_Phase_I</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">MarkdownVariations::add_feature</span><span class="plain-syntax">(</span><span class="identifier-syntax">extension_flavoured_Markdown</span><span class="plain-syntax">, </span><span class="constant-syntax">PASTE_ICONS_MARKDOWNFEATURE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Markdown::new_container_block_type</span><span class="plain-syntax">(</span><span class="constant-syntax">INFORM_EXAMPLE_HEADING_MIT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"INFORM_EXAMPLE_HEADING"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Markdown::new_leaf_block_type</span><span class="plain-syntax">(</span><span class="constant-syntax">INFORM_ERROR_MARKER_MIT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"INFORM_ERROR_MARKER"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">extension_flavoured_Markdown</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>Markdown paragraphs which take the following shapes are to be headings:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> Chapter: Survey and Prospecting</span>
<span class="plain-syntax"> Section: Black Gold</span>
<span class="plain-syntax"> Example: *** Gelignite Anderson - A Tale of the Texas Oilmen</span>
</pre>
<p class="commentary">where in each case the colon can equally be a hyphen, and with optional
space either side.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationInMarkdown::Inform_headings_intervene_after_Phase_I</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">DocumentationInMarkdown::Inform_headings_intervene_after_Phase_I</span></span>:<br/><a href="7-dim.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">markdown_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">feature</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">md_links_dictionary</span><span class="plain-syntax"> *</span><span class="identifier-syntax">link_references</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">example_number</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="7-dim.html#SP2" class="function-link"><span class="function-syntax">DocumentationInMarkdown::Inform_headings_r</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tree</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">example_number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dim.html#SP3" class="function-link"><span class="function-syntax">DocumentationInMarkdown::regroup_examples_r</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tree</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">example_number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">section_number</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">chapter_number</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">latest</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="7-dim.html#SP4" class="function-link"><span class="function-syntax">DocumentationInMarkdown::number_headings_r</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tree</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">section_number</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">chapter_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">latest</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">latest</span><span class="plain-syntax">)</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationInMarkdown::Inform_headings_r</span><span class="plain-syntax">(</span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">md</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">example_number</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">PARAGRAPH_MIT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">line</span><span class="plain-syntax"> = </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Regexp::create_mr</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Section *: *(%c+?)"</span><span class="plain-syntax">)) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Section *- *(%c+?)"</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">MDBlockParser::change_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">md</span><span class="plain-syntax">, </span><span class="identifier-syntax">HEADING_MIT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Markdown::set_heading_level</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0]);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Chapter *: *(%c+?)"</span><span class="plain-syntax">)) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Chapter *- *(%c+?)"</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">MDBlockParser::change_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">md</span><span class="plain-syntax">, </span><span class="identifier-syntax">HEADING_MIT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Markdown::set_heading_level</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0]);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Example *: *(%**) *(%c+?)"</span><span class="plain-syntax">)) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Example *- *(%**) *(%c+?)"</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">MDBlockParser::change_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">md</span><span class="plain-syntax">, </span><span class="constant-syntax">INFORM_EXAMPLE_HEADING_MIT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">star_count</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_example</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_eg</span><span class="plain-syntax"> = </span><a href="7-dc.html#SP2" class="function-link"><span class="function-syntax">DocumentationCompiler::new_example_alone</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">star_count</span><span class="plain-syntax">, ++(*</span><span class="identifier-syntax">example_number</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">star_count</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="7-dim.html#SP2" class="function-link"><span class="function-syntax">DocumentationInMarkdown::error_item</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"this example should be marked (before the title) '*', '**', '***' or '****' for difficulty"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">; </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">E</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">star_count</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">4</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="7-dim.html#SP2" class="function-link"><span class="function-syntax">DocumentationInMarkdown::error_item</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"four stars '****' is the maximum difficulty rating allowed"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">; </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">E</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">user_state</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_cdoc_example</span><span class="plain-syntax">(</span><span class="identifier-syntax">new_eg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Regexp::dispose_of</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">; </span><span class="identifier-syntax">ch</span><span class="plain-syntax">; </span><span class="identifier-syntax">ch</span><span class="plain-syntax">=</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dim.html#SP2" class="function-link"><span class="function-syntax">DocumentationInMarkdown::Inform_headings_r</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">, </span><span class="identifier-syntax">example_number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationInMarkdown::error_item</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">DocumentationInMarkdown::error_item</span></span>:<br/>Documentation Compiler - <a href="7-dc.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Markdown::new_item</span><span class="plain-syntax">(</span><span class="constant-syntax">INFORM_ERROR_MARKER_MIT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">text</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationInMarkdown::regroup_examples_r</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">DocumentationInMarkdown::regroup_examples_r</span></span>:<br/><a href="7-dim.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">md</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">example_number</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="constant-syntax">INFORM_EXAMPLE_HEADING_MIT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">run_from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">run_from</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">run_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">run_from</span><span class="plain-syntax">, *</span><span class="identifier-syntax">prev</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">run_to</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">run_to</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="constant-syntax">INFORM_EXAMPLE_HEADING_MIT</span><span class="plain-syntax">) </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">run_to</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">HEADING_MIT</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Markdown::get_heading_level</span><span class="plain-syntax">(</span><span class="identifier-syntax">run_to</span><span class="plain-syntax">) &lt;= </span><span class="constant-syntax">2</span><span class="plain-syntax">)) </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">prev</span><span class="plain-syntax"> = </span><span class="identifier-syntax">run_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">run_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">run_to</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">prev</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax"> = </span><span class="identifier-syntax">run_from</span><span class="plain-syntax">; </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">run_to</span><span class="plain-syntax">; </span><span class="identifier-syntax">prev</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">; </span><span class="identifier-syntax">ch</span><span class="plain-syntax">; </span><span class="identifier-syntax">ch</span><span class="plain-syntax">=</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dim.html#SP3" class="function-link"><span class="function-syntax">DocumentationInMarkdown::regroup_examples_r</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">, </span><span class="identifier-syntax">example_number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationInMarkdown::number_headings_r</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">DocumentationInMarkdown::number_headings_r</span></span>:<br/><a href="7-dim.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">md</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">section_number</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">chapter_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">latest</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">HEADING_MIT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Markdown::get_heading_level</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax">: {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">user_state</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_text_stream</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> (*</span><span class="identifier-syntax">chapter_number</span><span class="plain-syntax">)++;</span>
<span class="plain-syntax"> (*</span><span class="identifier-syntax">section_number</span><span class="plain-syntax">) = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">latest</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">latest</span><span class="plain-syntax">, </span><span class="string-syntax">"Chapter %d: %S"</span><span class="plain-syntax">, *</span><span class="identifier-syntax">chapter_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">latest</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">url</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">url</span><span class="plain-syntax">, </span><span class="string-syntax">"chapter%d.html"</span><span class="plain-syntax">, *</span><span class="identifier-syntax">chapter_number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">user_state</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_text_stream</span><span class="plain-syntax">(</span><span class="identifier-syntax">url</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax">: {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">user_state</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_text_stream</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> (*</span><span class="identifier-syntax">section_number</span><span class="plain-syntax">)++;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">latest</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">latest</span><span class="plain-syntax">, </span><span class="string-syntax">"Section "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">chapter_number</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">latest</span><span class="plain-syntax">, </span><span class="string-syntax">"%d."</span><span class="plain-syntax">, *</span><span class="identifier-syntax">chapter_number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">latest</span><span class="plain-syntax">, </span><span class="string-syntax">"%d: %S"</span><span class="plain-syntax">, *</span><span class="identifier-syntax">section_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">latest</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">url</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">chapter_number</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">url</span><span class="plain-syntax">, </span><span class="string-syntax">"chapter%d.html"</span><span class="plain-syntax">, *</span><span class="identifier-syntax">chapter_number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">url</span><span class="plain-syntax">, </span><span class="string-syntax">"#section%d"</span><span class="plain-syntax">, *</span><span class="identifier-syntax">section_number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">user_state</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_text_stream</span><span class="plain-syntax">(</span><span class="identifier-syntax">url</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">; </span><span class="identifier-syntax">ch</span><span class="plain-syntax">; </span><span class="identifier-syntax">ch</span><span class="plain-syntax">=</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dim.html#SP4" class="function-link"><span class="function-syntax">DocumentationInMarkdown::number_headings_r</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">, </span><span class="identifier-syntax">section_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">chapter_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">latest</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationInMarkdown::paste_icons_intervene_after_Phase_I</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">DocumentationInMarkdown::paste_icons_intervene_after_Phase_I</span></span>:<br/><a href="7-dim.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">markdown_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">feature</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">md_links_dictionary</span><span class="plain-syntax"> *</span><span class="identifier-syntax">link_references</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dim.html#SP4" class="function-link"><span class="function-syntax">DocumentationInMarkdown::paiapi_r</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tree</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationInMarkdown::paiapi_r</span><span class="plain-syntax">(</span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">md</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">current_sample</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">; </span><span class="identifier-syntax">ch</span><span class="plain-syntax">; </span><span class="identifier-syntax">ch</span><span class="plain-syntax">=</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">CODE_BLOCK_MIT</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Str::prefix_eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"{*}"</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">user_state</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_markdown_item</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sample</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ch</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">CODE_BLOCK_MIT</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::prefix_eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"{**}"</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">current_sample</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">user_state</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_markdown_item</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_sample</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="7-dim.html#SP4" class="function-link"><span class="function-syntax">DocumentationInMarkdown::paiapi_r</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">CODE_BLOCK_MIT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">detabbed</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0, </span><span class="identifier-syntax">margin</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;Str::len(ch-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\t'</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">detabbed</span><span class="plain-syntax">, </span><span class="character-syntax">' '</span><span class="plain-syntax">); </span><span class="identifier-syntax">margin</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">margin</span><span class="plain-syntax"> % </span><span class="constant-syntax">4</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">detabbed</span><span class="plain-syntax">, </span><span class="character-syntax">' '</span><span class="plain-syntax">); </span><span class="identifier-syntax">margin</span><span class="plain-syntax">++; }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">detabbed</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">); </span><span class="identifier-syntax">margin</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\n'</span><span class="plain-syntax">) </span><span class="identifier-syntax">margin</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">detabbed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">detabbed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationInMarkdown::paste_icons_renderer</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">DocumentationInMarkdown::paste_icons_renderer</span></span>:<br/><a href="7-dim.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">markdown_feature</span><span class="plain-syntax"> *</span><span class="identifier-syntax">feature</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">md</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">mode</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">HEADING_MIT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Markdown::get_heading_level</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax">: </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"h2"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax">: </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"h3"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span><span class="plain-syntax">: </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"h4"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span><span class="plain-syntax">: </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"h5"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span><span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"h6"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">anchor</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax"> &lt;= </span><span class="constant-syntax">2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">url</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_text_stream</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">user_state</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">url</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">url</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">) == </span><span class="character-syntax">'#'</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax">++; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">url</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">anchor</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">url</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">anchor</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">, </span><span class="string-syntax">"id=%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">anchor</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">anchor</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Markdown::render_extended</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">, </span><a href="7-dim.html#SP1" class="function-link"><span class="function-syntax">DocumentationInMarkdown::extension_flavoured_Markdown</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax">: </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"h2"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax">: </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"h3"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span><span class="plain-syntax">: </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"h4"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span><span class="plain-syntax">: </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"h5"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span><span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"h6"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="constant-syntax">INFORM_EXAMPLE_HEADING_MIT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_example</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_example</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">user_state</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dim.html#SP5" class="function-link"><span class="function-syntax">DocumentationInMarkdown::render_example_heading</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">CODE_BLOCK_MIT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dim.html#SP7" class="function-link"><span class="function-syntax">DocumentationInMarkdown::render_code_block</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">md</span><span class="plain-syntax">, </span><span class="identifier-syntax">mode</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="constant-syntax">INFORM_ERROR_MARKER_MIT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"documentationerrorbox\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"documentationerror"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Error: %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>An example is set with a two-table header, and followed optionally by a
table of its inset copy, shaded to distinguish it from the rest of the
page. The heading is constructed with a main table of one row of two cells,
in the following section. The left-hand cell then contains a further table,
in the next section.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationInMarkdown::render_example_heading</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">DocumentationInMarkdown::render_example_heading</span></span>:<br/><a href="7-dim.html#SP4">&#167;4</a><br/>Documentation Renderer - <a href="7-dr.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">cdoc_example</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">passage_node</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">, </span><span class="string-syntax">"style=\"text-decoration: none\" href=\"eg%d.html\""</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"hr"</span><span class="plain-syntax">); </span><span class="comment-syntax"> rule a line before the example heading</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_plain_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"tr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> Left hand cell: the oval icon</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">, </span><span class="string-syntax">"halign=\"left\" valign=\"top\" cellpadding=0 cellspacing=0 width=38px"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">, </span><span class="string-syntax">"id=eg%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">number</span><span class="plain-syntax">); </span><span class="comment-syntax"> provide the anchor point</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dim.html#SP5_1" class="named-paragraph-link"><span class="named-paragraph">Typeset the lettered oval example icon</span><span class="named-paragraph-number">5.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">); </span><span class="comment-syntax"> end the textual link</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> Right hand cell: the asterisks and title, with rubric underneath</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">, </span><span class="string-syntax">"cellpadding=0 cellspacing=0 halign=\"left\" valign=\"top\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">passage_node</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">link</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">asterisk</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">asterisk</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">star_count</span><span class="plain-syntax">; </span><span class="identifier-syntax">asterisk</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">(</span><span class="constant-syntax">0x2605</span><span class="plain-syntax">); </span><span class="comment-syntax"> the Unicode for "black star" emoji</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> or 0x2B50 is the Unicode for "star" emoji</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> or again, could use the asterisk.png image in the app</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;nbsp; "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"b"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indexdarkgrey"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;nbsp;Example&amp;nbsp;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indexblack"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"br"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">description</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"b"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">passage_node</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">); </span><span class="comment-syntax"> Link does not cover body, only heading</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">passage_node</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">passage_node</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Markdown::render_extended</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">passage_node</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="7-dim.html#SP1" class="function-link"><span class="function-syntax">DocumentationInMarkdown::extension_flavoured_Markdown</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">passage_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">passage_node</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"tr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">)</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5_1" class="paragraph-anchor"></a><b>&#167;5.1. </b>The little oval icon with its superimposed boldface letter is much harder to
get right on all browsers than it looks, and the following is the result of
some pretty grim experimentation. Basically, we make a tight, borderless,
one-cell-in-one-row table, use CSS to make a transparent PNG image of an oval
the background image for the table, then put a boldface letter in the centre
of its one and only cell. (Things were even worse when IE6 for Windows still
had its infamous PNG transparency bug.)
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Typeset the lettered oval example icon</span><span class="named-paragraph-number">5.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_plain_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"tr"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"oval\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">, </span><span class="string-syntax">"width=38px height=30px align=\"left\" valign=\"center\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">passage_node</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">link</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"class=\"paragraph Body\" style=\"line-height: 1px; margin-bottom: 0px; "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"margin-top: 0px; padding-bottom: 0pt; padding-top: 0px; text-align: center;\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"extensionexampleletter"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">letter</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">passage_node</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"tr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dim.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationInMarkdown::find_section</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">DocumentationInMarkdown::find_section</span></span>:<br/>Documentation Compiler - <a href="7-dc.html#SP3_1_2">&#167;3.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="7-dim.html#SP6" class="function-link"><span class="function-syntax">DocumentationInMarkdown::find</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">result</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">result</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationInMarkdown::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">md</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> **</span><span class="identifier-syntax">result</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">HEADING_MIT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Markdown::get_heading_level</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax">: {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;Str::len(md-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">) == </span><span class="character-syntax">':'</span><span class="plain-syntax">) { </span><span class="identifier-syntax">i</span><span class="plain-syntax">+=2; </span><span class="reserved-syntax">break</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax"> + </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">) == </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">fail</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">j</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">j</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">); </span><span class="identifier-syntax">j</span><span class="plain-syntax">++, </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">j</span><span class="plain-syntax">) != </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">)) { </span><span class="identifier-syntax">fail</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">fail</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp; (*</span><span class="identifier-syntax">result</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) *</span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">md</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">; </span><span class="identifier-syntax">ch</span><span class="plain-syntax">; </span><span class="identifier-syntax">ch</span><span class="plain-syntax">=</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dim.html#SP6" class="function-link"><span class="function-syntax">DocumentationInMarkdown::find</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">result</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationInMarkdown::find_example</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">DocumentationInMarkdown::find_example</span></span>:<br/>Documentation Renderer - <a href="7-dr.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tree</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">eg</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">eg</span><span class="plain-syntax"> &lt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">counter</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="7-dim.html#SP7" class="function-link"><span class="function-syntax">DocumentationInMarkdown::find_e</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">eg</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">result</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">counter</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">result</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationInMarkdown::find_e</span><span class="plain-syntax">(</span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">md</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">eg</span><span class="plain-syntax">, </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> **</span><span class="identifier-syntax">result</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">counter</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="constant-syntax">INFORM_EXAMPLE_HEADING_MIT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> (*</span><span class="identifier-syntax">counter</span><span class="plain-syntax">)++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">counter</span><span class="plain-syntax"> == </span><span class="identifier-syntax">eg</span><span class="plain-syntax">) *</span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">md</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">; </span><span class="identifier-syntax">ch</span><span class="plain-syntax">; </span><span class="identifier-syntax">ch</span><span class="plain-syntax">=</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dim.html#SP7" class="function-link"><span class="function-syntax">DocumentationInMarkdown::find_e</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">, </span><span class="identifier-syntax">eg</span><span class="plain-syntax">, </span><span class="identifier-syntax">result</span><span class="plain-syntax">, </span><span class="identifier-syntax">counter</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationInMarkdown::render_code_block</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">DocumentationInMarkdown::render_code_block</span></span>:<br/><a href="7-dim.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">md</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">mode</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">info_string</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"inform"</span><span class="plain-syntax">)) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">info_string</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"inform7"</span><span class="plain-syntax">)) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">info_string</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dim.html#SP7_2" class="named-paragraph-link"><span class="named-paragraph">Render as Inform 7 source text</span><span class="named-paragraph-number">7.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">programming_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">mode</span><span class="plain-syntax"> &amp; </span><span class="identifier-syntax">TAGS_MDRMODE</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"pre"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">language</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;Str::len(md-&gt;</span><span class="identifier-syntax">info_string</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">info_string</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">' '</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\t'</span><span class="plain-syntax">)) </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">language</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">language</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">language_rendered</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">sliced_from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">language</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">from</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">language</span><span class="plain-syntax">) - </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">MDRenderer::slice</span><span class="plain-syntax">(</span><span class="identifier-syntax">language_rendered</span><span class="plain-syntax">, </span><span class="identifier-syntax">md</span><span class="plain-syntax">, </span><span class="identifier-syntax">mode</span><span class="plain-syntax"> | </span><span class="identifier-syntax">ENTITIES_MDRMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">mode</span><span class="plain-syntax"> &amp; </span><span class="identifier-syntax">TAGS_MDRMODE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"code"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"language-%S\""</span><span class="plain-syntax">, </span><span class="identifier-syntax">language_rendered</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><a href="7-dc.html#SP8" class="function-link"><span class="function-syntax">DocumentationCompiler::get_language</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">language_rendered</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Unable to find language &lt;%S&gt;\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">language_rendered</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">language_rendered</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">mode</span><span class="plain-syntax"> &amp; </span><span class="identifier-syntax">TAGS_MDRMODE</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"code"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">language</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Painter::reset_syntax_colouring</span><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">line_colouring</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">k</span><span class="function-syntax">&lt;Str::len(md-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">); </span><span class="identifier-syntax">k</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">, </span><span class="identifier-syntax">k</span><span class="plain-syntax">) == </span><span class="character-syntax">'\n'</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dim.html#SP7_1" class="named-paragraph-link"><span class="named-paragraph">Render line as code</span><span class="named-paragraph-number">7.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">line_colouring</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">, </span><span class="identifier-syntax">k</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">k</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">) - </span><span class="constant-syntax">1</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="7-dim.html#SP7_1" class="named-paragraph-link"><span class="named-paragraph">Render line as code</span><span class="named-paragraph-number">7.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">line_colouring</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">mode</span><span class="plain-syntax"> &amp; </span><span class="identifier-syntax">TAGS_MDRMODE</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"code"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">mode</span><span class="plain-syntax"> &amp; </span><span class="identifier-syntax">TAGS_MDRMODE</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"pre"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7_1" class="paragraph-anchor"></a><b>&#167;7.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Render line as code</span><span class="named-paragraph-number">7.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pl</span><span class="plain-syntax">) </span><span class="identifier-syntax">Painter::syntax_colour</span><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">line_colouring</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dim.html#SP8" class="function-link"><span class="function-syntax">DocumentationInMarkdown::syntax_coloured_code</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">line_colouring</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">), </span><span class="identifier-syntax">mode</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">mode</span><span class="plain-syntax"> &amp; </span><span class="identifier-syntax">TAGS_MDRMODE</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;br&gt;"</span><span class="plain-syntax">); </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dim.html#SP7">&#167;7</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP7_2" class="paragraph-anchor"></a><b>&#167;7.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Render as Inform 7 source text</span><span class="named-paragraph-number">7.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"blockquote"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">GENERAL_POINTER_IS_NULL</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">user_state</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">first</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_markdown_item</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">user_state</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">accumulated</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">md</span><span class="plain-syntax">; </span><span class="identifier-syntax">ch</span><span class="plain-syntax">; </span><span class="identifier-syntax">ch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">CODE_BLOCK_MIT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">GENERAL_POINTER_IS_NULL</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">user_state</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">latest</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_markdown_item</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">user_state</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">first</span><span class="plain-syntax"> == </span><span class="identifier-syntax">latest</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">accumulated</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="7-tm.html#SP9" class="function-link"><span class="function-syntax">ExtensionWebsite::paste_button</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">accumulated</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">colouring</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">programming_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">default_language</span><span class="plain-syntax"> = </span><a href="7-dc.html#SP8" class="function-link"><span class="function-syntax">DocumentationCompiler::get_language</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"Inform"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">programming_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">default_language</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pl</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Painter::reset_syntax_colouring</span><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Painter::syntax_colour</span><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">, </span><span class="identifier-syntax">colouring</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">language_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Inform"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ts</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">colouring</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">colouring</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">) == </span><span class="identifier-syntax">STRING_COLOUR</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'['</span><span class="plain-syntax">) </span><span class="identifier-syntax">ts</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ts</span><span class="plain-syntax">) </span><span class="identifier-syntax">Str::put_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">colouring</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">EXTRACT_COLOUR</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">']'</span><span class="plain-syntax">) </span><span class="identifier-syntax">ts</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">ts</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indexdullblue"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tabulating</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">tabular</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">line_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">line_colouring</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">k</span><span class="function-syntax">&lt;Str::len(md-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">); </span><span class="identifier-syntax">k</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">, </span><span class="identifier-syntax">k</span><span class="plain-syntax">) == </span><span class="character-syntax">'\n'</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dim.html#SP7_2_1" class="named-paragraph-link"><span class="named-paragraph">Render line</span><span class="named-paragraph-number">7.2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">line_colouring</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">, </span><span class="identifier-syntax">k</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">line_colouring</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">colouring</span><span class="plain-syntax">, </span><span class="identifier-syntax">k</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">k</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">) - </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-dim.html#SP7_2_1" class="named-paragraph-link"><span class="named-paragraph">Render line</span><span class="named-paragraph-number">7.2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tabulating</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-dim.html#SP7_2_2" class="named-paragraph-link"><span class="named-paragraph">End I7 table in extension documentation</span><span class="named-paragraph-number">7.2.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"blockquote"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">line_colouring</span><span class="plain-syntax">)</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dim.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_2_1" class="paragraph-anchor"></a><b>&#167;7.2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Render line</span><span class="named-paragraph-number">7.2.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">line_count</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::is_whitespace</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">)) </span><span class="identifier-syntax">tabular</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Regexp::create_mr</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Table %c*"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">tabular</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Regexp::dispose_of</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tabular</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tabulating</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dim.html#SP7_2_1_4" class="named-paragraph-link"><span class="named-paragraph">Begin new row of I7 table in extension documentation</span><span class="named-paragraph-number">7.2.1.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dim.html#SP7_2_1_1" class="named-paragraph-link"><span class="named-paragraph">Begin I7 table in extension documentation</span><span class="named-paragraph-number">7.2.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tabulating</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cell_from</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">cell_to</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dim.html#SP7_2_1_3" class="named-paragraph-link"><span class="named-paragraph">Begin table cell for I7 table in extension documentation</span><span class="named-paragraph-number">7.2.1.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">) == </span><span class="character-syntax">'\t'</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dim.html#SP7_2_1_2" class="named-paragraph-link"><span class="named-paragraph">End table cell for I7 table in extension documentation</span><span class="named-paragraph-number">7.2.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">) == </span><span class="character-syntax">'\t'</span><span class="plain-syntax">) </span><span class="identifier-syntax">i</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dim.html#SP7_2_1_3" class="named-paragraph-link"><span class="named-paragraph">Begin table cell for I7 table in extension documentation</span><span class="named-paragraph-number">7.2.1.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">--;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cell_to</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dim.html#SP7_2_1_2" class="named-paragraph-link"><span class="named-paragraph">End table cell for I7 table in extension documentation</span><span class="named-paragraph-number">7.2.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dim.html#SP7_2_1_5" class="named-paragraph-link"><span class="named-paragraph">End row of I7 table in extension documentation</span><span class="named-paragraph-number">7.2.1.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">line_count</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"br"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tabulating</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dim.html#SP7_2_2" class="named-paragraph-link"><span class="named-paragraph">End I7 table in extension documentation</span><span class="named-paragraph-number">7.2.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tabulating</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">indentation</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">z</span><span class="plain-syntax">=0, </span><span class="identifier-syntax">spaces</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (; </span><span class="identifier-syntax">z</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">); </span><span class="identifier-syntax">z</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">z</span><span class="plain-syntax">) == </span><span class="character-syntax">' '</span><span class="plain-syntax">) { </span><span class="identifier-syntax">spaces</span><span class="plain-syntax">++; </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">spaces</span><span class="plain-syntax"> == </span><span class="constant-syntax">4</span><span class="plain-syntax">) { </span><span class="identifier-syntax">indentation</span><span class="plain-syntax">++; </span><span class="identifier-syntax">spaces</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; } }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">z</span><span class="plain-syntax">) == </span><span class="character-syntax">'\t'</span><span class="plain-syntax">) { </span><span class="identifier-syntax">indentation</span><span class="plain-syntax">++; </span><span class="identifier-syntax">spaces</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">n</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">indentation</span><span class="plain-syntax">; </span><span class="identifier-syntax">n</span><span class="plain-syntax">++) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dim.html#SP8" class="function-link"><span class="function-syntax">DocumentationInMarkdown::syntax_coloured_code</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">line_colouring</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">z</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">), </span><span class="identifier-syntax">mode</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dim.html#SP7_2">&#167;7.2</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP7_2_1_1" class="paragraph-anchor"></a><b>&#167;7.2.1.1. </b>Unsurprisingly, I7 tables are set (after their titling lines) as HTML tables,
and this is fiddly but elementary in the usual way of HTML tables:
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin I7 table in extension documentation</span><span class="named-paragraph-number">7.2.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"br"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_plain_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::first_html_column</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dim.html#SP7_2_1">&#167;7.2.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_2_1_2" class="paragraph-anchor"></a><b>&#167;7.2.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">End table cell for I7 table in extension documentation</span><span class="named-paragraph-number">7.2.1.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="7-dim.html#SP8" class="function-link"><span class="function-syntax">DocumentationInMarkdown::syntax_coloured_code</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">line_colouring</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cell_from</span><span class="plain-syntax">, </span><span class="identifier-syntax">cell_to</span><span class="plain-syntax">, </span><span class="identifier-syntax">mode</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::next_html_column</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dim.html#SP7_2_1">&#167;7.2.1</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP7_2_1_3" class="paragraph-anchor"></a><b>&#167;7.2.1.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin table cell for I7 table in extension documentation</span><span class="named-paragraph-number">7.2.1.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">cell_from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="identifier-syntax">cell_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cell_from</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indexdullblue"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dim.html#SP7_2_1">&#167;7.2.1</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP7_2_1_4" class="paragraph-anchor"></a><b>&#167;7.2.1.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin new row of I7 table in extension documentation</span><span class="named-paragraph-number">7.2.1.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::first_html_column</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dim.html#SP7_2_1">&#167;7.2.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_2_1_5" class="paragraph-anchor"></a><b>&#167;7.2.1.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">End row of I7 table in extension documentation</span><span class="named-paragraph-number">7.2.1.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_html_row</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dim.html#SP7_2_1">&#167;7.2.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_2_2" class="paragraph-anchor"></a><b>&#167;7.2.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">End I7 table in extension documentation</span><span class="named-paragraph-number">7.2.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indexdullblue"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dim.html#SP7_2">&#167;7.2</a>, <a href="7-dim.html#SP7_2_1">&#167;7.2.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationInMarkdown::syntax_coloured_code</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">DocumentationInMarkdown::syntax_coloured_code</span></span>:<br/><a href="7-dim.html#SP7_1">&#167;7.1</a>, <a href="7-dim.html#SP7_2_1">&#167;7.2.1</a>, <a href="7-dim.html#SP7_2_1_2">&#167;7.2.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">colouring</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">mode</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">current_col</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=</span><span class="identifier-syntax">from</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">to</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">col</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">colouring</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">col</span><span class="plain-syntax"> != </span><span class="identifier-syntax">current_col</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_col</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">col</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">DEFINITION_COLOUR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntaxdefinition"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">FUNCTION_COLOUR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntaxfunction"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">RESERVED_COLOUR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntaxreserved"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">ELEMENT_COLOUR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntaxelement"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">IDENTIFIER_COLOUR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntaxidentifier"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CHARACTER_COLOUR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntaxcharacter"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONSTANT_COLOUR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntaxconstant"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">STRING_COLOUR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntaxstring"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PLAIN_COLOUR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntaxplain"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">EXTRACT_COLOUR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntaxextract"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">COMMENT_COLOUR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntaxcomment"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"%S\""</span><span class="plain-syntax">, </span><span class="identifier-syntax">span_class</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_col</span><span class="plain-syntax"> = </span><span class="identifier-syntax">col</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">MDRenderer::char</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">, </span><span class="identifier-syntax">mode</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_col</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="7-dr.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresssection"><a href="7-tm.html">tm</a></li><li class="progresssection"><a href="7-eip.html">eip</a></li><li class="progresssection"><a href="7-ti.html">ti</a></li><li class="progresssection"><a href="7-tc.html">tc</a></li><li class="progresssection"><a href="7-dc.html">dc</a></li><li class="progresssection"><a href="7-dr.html">dr</a></li><li class="progresscurrent">dim</li><li class="progressnextoff">&#10095;</li></ul></div>
</nav><!--End of weave-->
</main>
</body>
</html>

View file

@ -59,60 +59,16 @@ function togglePopup(material_id) {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inbuildn.html">Inbuild Modules</a></li><li><a href="index.html">supervisor</a></li><li><a href="index.html#7">Chapter 7: Extension Management</a></li><li><b>Documentation Renderer</b></li></ul></div>
<p class="purpose">To render a passage of extension documentation as HTML.</p>
<ul class="toc"><li><a href="7-dr.html#SP1">&#167;1. Textual renderer</a></li><li><a href="7-dr.html#SP2">&#167;2. Website renderer</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="7-dr.html#SP1">&#167;1. Website renderer</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Textual renderer. </b>This very cheap renderer can be used to debug trees for logging purposes:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::as_plain_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">heterogeneous_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"--------\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">INDENT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::traverse_from</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">root</span><span class="plain-syntax">, &amp;</span><a href="7-dr.html#SP1" class="function-link"><span class="function-syntax">DocumentationRenderer::textual_visit</span></a><span class="plain-syntax">, (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">DL</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">OUTDENT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"--------\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::textual_visit</span><span class="plain-syntax">(</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">state</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">state</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">L</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">heading_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">H</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_heading</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Heading H%d level %d: '%S - %S'\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ID</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">level</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">example_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_example</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_example</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Example %c: '%S' (%d star(s))\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">letter</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">star_count</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">phrase_defn_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_phrase_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_phrase_defn</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Phrase definition (tag '%S') [ %S ]\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tag</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">prototype</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">passage_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Passage\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">paragraph_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_paragraph</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_paragraph</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Paragraph: %d chars\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">L</span><span class="plain-syntax">+1; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) { </span><span class="identifier-syntax">INDENT</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">L</span><span class="plain-syntax">+1; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) { </span><span class="identifier-syntax">OUTDENT</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">code_sample_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Code sample\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">code_line_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_code_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_code_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Code line: "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;E-&gt;</span><span class="element-syntax">indentation</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Unknown node\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. Website renderer. </b>We will make several HTML files, but only one at a time:
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Website renderer. </b>We will make several HTML files, but only one at a time:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> </span><span class="identifier-syntax">DOCF_struct</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">DOCF</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationRenderer::open_subpage</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::open_subpage</span></span>:<br/><a href="7-dr.html#SP3">&#167;3</a><br/>The Mini-Website - <a href="7-tm.html#SP7_1">&#167;7.1</a>, <a href="7-tm.html#SP7_1_2">&#167;7.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationRenderer::open_subpage</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::open_subpage</span></span>:<br/><a href="7-dr.html#SP2">&#167;2</a><br/>The Mini-Website - <a href="7-tm.html#SP7_1">&#167;7.1</a>, <a href="7-tm.html#SP7_1_2">&#167;7.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">STDOUT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">DOCF</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"nested DC writes"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">leaf</span><span class="plain-syntax">);</span>
@ -126,74 +82,73 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">DOCF</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::close_subpage</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::close_subpage</span></span>:<br/><a href="7-dr.html#SP3">&#167;3</a><br/>The Mini-Website - <a href="7-tm.html#SP7_1">&#167;7.1</a>, <a href="7-tm.html#SP7_1_2">&#167;7.1.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::close_subpage</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::close_subpage</span></span>:<br/><a href="7-dr.html#SP2">&#167;2</a><br/>The Mini-Website - <a href="7-tm.html#SP7_1">&#167;7.1</a>, <a href="7-tm.html#SP7_1_2">&#167;7.1.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">DOCF</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no DC page open"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">DOCF</span><span class="plain-syntax"> != </span><span class="identifier-syntax">STDOUT</span><span class="plain-syntax">) </span><span class="identifier-syntax">STREAM_CLOSE</span><span class="plain-syntax">(</span><span class="identifier-syntax">DOCF</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DOCF</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>Our tree is turned into a tiny website, with a single index page for everything
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>Our tree is turned into a tiny website, with a single index page for everything
except the examples, and then up to 26 pages holding the content of examples A to Z.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::as_HTML</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::as_HTML</span></span>:<br/>Extension Services - <a href="5-es.html#SP13">&#167;13</a><br/>The Mini-Website - <a href="7-tm.html#SP7">&#167;7</a>, <a href="7-tm.html#SP7_1_2">&#167;7.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">extras</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cd</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="7-dr.html#SP2" class="function-link"><span class="function-syntax">DocumentationRenderer::open_subpage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"index.html"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="7-dr.html#SP1" class="function-link"><span class="function-syntax">DocumentationRenderer::open_subpage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"index.html"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP4" class="function-link"><span class="function-syntax">DocumentationRenderer::render_index_page</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">extras</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP2" class="function-link"><span class="function-syntax">DocumentationRenderer::close_subpage</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP3" class="function-link"><span class="function-syntax">DocumentationRenderer::render_index_page</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">extras</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP1" class="function-link"><span class="function-syntax">DocumentationRenderer::close_subpage</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">eg</span><span class="plain-syntax">=1; </span><span class="identifier-syntax">eg</span><span class="function-syntax">&lt;=cd-&gt;</span><span class="element-syntax">total_examples</span><span class="plain-syntax">; </span><span class="identifier-syntax">eg</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">, </span><span class="string-syntax">"eg%d.html"</span><span class="plain-syntax">, </span><span class="identifier-syntax">eg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="7-dr.html#SP2" class="function-link"><span class="function-syntax">DocumentationRenderer::open_subpage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">leaf</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="7-dr.html#SP1" class="function-link"><span class="function-syntax">DocumentationRenderer::open_subpage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">leaf</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP5" class="function-link"><span class="function-syntax">DocumentationRenderer::render_example_page</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">eg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP2" class="function-link"><span class="function-syntax">DocumentationRenderer::close_subpage</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP4" class="function-link"><span class="function-syntax">DocumentationRenderer::render_example_page</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">eg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP1" class="function-link"><span class="function-syntax">DocumentationRenderer::close_subpage</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ch</span><span class="plain-syntax">=1; </span><span class="identifier-syntax">ch</span><span class="function-syntax">&lt;=cd-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[1]; </span><span class="identifier-syntax">ch</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">, </span><span class="string-syntax">"chapter%d.html"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="7-dr.html#SP2" class="function-link"><span class="function-syntax">DocumentationRenderer::open_subpage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">leaf</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="7-dr.html#SP1" class="function-link"><span class="function-syntax">DocumentationRenderer::open_subpage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">leaf</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP5" class="function-link"><span class="function-syntax">DocumentationRenderer::render_chapter_page</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP2" class="function-link"><span class="function-syntax">DocumentationRenderer::close_subpage</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP4" class="function-link"><span class="function-syntax">DocumentationRenderer::render_chapter_page</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP1" class="function-link"><span class="function-syntax">DocumentationRenderer::close_subpage</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_index_page</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_index_page</span></span>:<br/><a href="7-dr.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_index_page</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_index_page</span></span>:<br/><a href="7-dr.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">extras</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP6" class="function-link"><span class="function-syntax">DocumentationRenderer::render_header</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">within_extension</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP5" class="function-link"><span class="function-syntax">DocumentationRenderer::render_header</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">within_extension</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">associated_extension</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP7" class="function-link"><span class="function-syntax">DocumentationRenderer::render_extension_details</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">associated_extension</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP6" class="function-link"><span class="function-syntax">DocumentationRenderer::render_extension_details</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">associated_extension</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"hr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[1] &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="comment-syntax"> there are chapters</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::render_toc</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP7" class="function-link"><span class="function-syntax">DocumentationRenderer::render_toc</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"em"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Click on Chapter, Section or Example numbers to read"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Click on Chapter, Section or Example numbers to read"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"em"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">root</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">passage_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">md</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">alt_tree</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">md</span><span class="plain-syntax">) &amp;&amp; ((</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> != </span><span class="identifier-syntax">HEADING_MIT</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">Markdown::get_heading_level</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">1</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"hr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"extensionsubheading\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"introduction"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">root</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">; </span><span class="identifier-syntax">C</span><span class="plain-syntax">; </span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">heading_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_heading</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::render_body</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">md</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">alt_tree</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">; </span><span class="identifier-syntax">md</span><span class="plain-syntax">; </span><span class="identifier-syntax">md</span><span class="plain-syntax"> = </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">HEADING_MIT</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Markdown::get_heading_level</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">) == </span><span class="constant-syntax">1</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Markdown::render_extended</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">md</span><span class="plain-syntax">, </span><a href="7-dim.html#SP1" class="function-link"><span class="function-syntax">DocumentationInMarkdown::extension_flavoured_Markdown</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> { </span><span class="comment-syntax"> there are only sections and examples, or not even that</span>
@ -202,22 +157,25 @@ except the examples, and then up to 26 pages holding the content of examples A t
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">empty</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"None is provided."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"None is provided."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::render_body</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">root</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"markdowncontent\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Markdown::render_extended</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">alt_tree</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="7-dim.html#SP1" class="function-link"><span class="function-syntax">DocumentationInMarkdown::extension_flavoured_Markdown</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">extras</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Enter the small print</span><span class="named-paragraph-number">4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Enter the small print</span><span class="named-paragraph-number">3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"These documentation pages are first generated when an extension is "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"installed, and refreshed each time the project successfully translates."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP4_2" class="named-paragraph-link"><span class="named-paragraph">Exit the small print</span><span class="named-paragraph-number">4.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP6" class="function-link"><span class="function-syntax">DocumentationRenderer::render_footer</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP3_2" class="named-paragraph-link"><span class="named-paragraph">Exit the small print</span><span class="named-paragraph-number">3.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP5" class="function-link"><span class="function-syntax">DocumentationRenderer::render_footer</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4_1" class="paragraph-anchor"></a><b>&#167;4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Enter the small print</span><span class="named-paragraph-number">4.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP3_1" class="paragraph-anchor"></a><b>&#167;3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Enter the small print</span><span class="named-paragraph-number">3.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -225,34 +183,34 @@ except the examples, and then up to 26 pages holding the content of examples A t
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"em"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP4">&#167;4</a>, <a href="7-dr.html#SP5">&#167;5</a>, <a href="7-dr.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_2" class="paragraph-anchor"></a><b>&#167;4.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Exit the small print</span><span class="named-paragraph-number">4.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP3">&#167;3</a>, <a href="7-dr.html#SP4">&#167;4</a>, <a href="7-dr.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_2" class="paragraph-anchor"></a><b>&#167;3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Exit the small print</span><span class="named-paragraph-number">3.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"em"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP4">&#167;4</a>, <a href="7-dr.html#SP5">&#167;5</a>, <a href="7-dr.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b></p>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP3">&#167;3</a>, <a href="7-dr.html#SP4">&#167;4</a>, <a href="7-dr.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_example_page</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_example_page</span></span>:<br/><a href="7-dr.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">eg</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_example_page</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_example_page</span></span>:<br/><a href="7-dr.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">eg</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="string-syntax">"Example %c"</span><span class="plain-syntax">, </span><span class="character-syntax">'A'</span><span class="plain-syntax"> + </span><span class="identifier-syntax">eg</span><span class="plain-syntax"> - </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP6" class="function-link"><span class="function-syntax">DocumentationRenderer::render_header</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">within_extension</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP5" class="function-link"><span class="function-syntax">DocumentationRenderer::render_header</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">within_extension</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::render_example</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">eg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP6" class="function-link"><span class="function-syntax">DocumentationRenderer::render_footer</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP7" class="function-link"><span class="function-syntax">DocumentationRenderer::render_example</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">eg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP5" class="function-link"><span class="function-syntax">DocumentationRenderer::render_footer</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_chapter_page</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_chapter_page</span></span>:<br/><a href="7-dr.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ch</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_chapter_page</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_chapter_page</span></span>:<br/><a href="7-dr.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ch</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="string-syntax">"Chapter %d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP6" class="function-link"><span class="function-syntax">DocumentationRenderer::render_header</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">within_extension</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP5" class="function-link"><span class="function-syntax">DocumentationRenderer::render_header</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">within_extension</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::render_chapter</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Enter the small print</span><span class="named-paragraph-number">4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP7" class="function-link"><span class="function-syntax">DocumentationRenderer::render_chapter</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Enter the small print</span><span class="named-paragraph-number">3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"This is Chapter %d of %d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[1]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ch</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" &amp;bull; "</span><span class="plain-syntax">);</span>
@ -266,15 +224,15 @@ except the examples, and then up to 26 pages holding the content of examples A t
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Chapter %d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">+1);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP4_2" class="named-paragraph-link"><span class="named-paragraph">Exit the small print</span><span class="named-paragraph-number">4.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP6" class="function-link"><span class="function-syntax">DocumentationRenderer::render_footer</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP3_2" class="named-paragraph-link"><span class="named-paragraph">Exit the small print</span><span class="named-paragraph-number">3.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP5" class="function-link"><span class="function-syntax">DocumentationRenderer::render_footer</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>Each of these pages is equipped with the same Javascript and CSS.
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>Each of these pages is equipped with the same Javascript and CSS.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_header</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_header</span></span>:<br/><a href="7-dr.html#SP4">&#167;4</a>, <a href="7-dr.html#SP5">&#167;5</a><br/>The Mini-Website - <a href="7-tm.html#SP7_1">&#167;7.1</a>, <a href="7-tm.html#SP7_1_2">&#167;7.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ptitle</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_header</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_header</span></span>:<br/><a href="7-dr.html#SP3">&#167;3</a>, <a href="7-dr.html#SP4">&#167;4</a><br/>The Mini-Website - <a href="7-tm.html#SP7_1">&#167;7.1</a>, <a href="7-tm.html#SP7_1_2">&#167;7.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ptitle</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">within</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InformPages::header</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">JAVASCRIPT_FOR_ONE_EXTENSION_IRES</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-tm.html#SP8" class="function-link"><span class="function-syntax">ExtensionWebsite::add_home_breadcrumb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
@ -288,16 +246,16 @@ except the examples, and then up to 26 pages holding the content of examples A t
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"Documentation provided by the extension author"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_footer</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_footer</span></span>:<br/><a href="7-dr.html#SP4">&#167;4</a>, <a href="7-dr.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_footer</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_footer</span></span>:<br/><a href="7-dr.html#SP3">&#167;3</a>, <a href="7-dr.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InformPages::footer</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>This function is the only one which assumes our documentation comes from an
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>This function is the only one which assumes our documentation comes from an
extension.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_extension_details</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_extension_details</span></span>:<br/><a href="7-dr.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_extension_details</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_extension_details</span></span>:<br/><a href="7-dr.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">edition</span><span class="plain-syntax"> = </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax"> = </span><span class="identifier-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">;</span>
@ -316,14 +274,14 @@ extension.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">rubric_as_lexed</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">rubric_as_lexed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">rubric_as_lexed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">extra_credit_as_lexed</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"em"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">extra_credit_as_lexed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">extra_credit_as_lexed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"em"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
@ -333,111 +291,88 @@ extension.
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"compatibility"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parsed_from</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parsed_from</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>Now for the Table of Contents, which shows chapters, sections and examples
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>Now for the Table of Contents, which shows chapters, sections and examples
in a hierarchical fashion.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_toc</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_toc</span></span>:<br/><a href="7-dr.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_toc</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_toc</span></span>:<br/><a href="7-dr.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"extensionsubheading\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"contents"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"ul"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"extensioncontents\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::traverse_from</span><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">root</span><span class="plain-syntax">, &amp;</span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::toc_visitor</span></a><span class="plain-syntax">, (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP7" class="function-link"><span class="function-syntax">DocumentationRenderer::render_toc_r</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">alt_tree</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"ul"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::link_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">cdoc_heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">H</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">, </span><span class="string-syntax">"chapter%S.html"</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;Str::len(H-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'.'</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">, </span><span class="string-syntax">"chapter"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">j</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">j</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="identifier-syntax">j</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">, </span><span class="identifier-syntax">j</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">, </span><span class="string-syntax">".html"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">, </span><span class="string-syntax">"#section%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ID</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::link_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">md</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> != </span><span class="identifier-syntax">HEADING_MIT</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"not a heading"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_text_stream</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">user_state</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"style=\"text-decoration: none\" href=%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">)</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::toc_visitor</span><span class="plain-syntax">(</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">state</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">state</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">heading_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">H</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_heading</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_toc_r</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">md</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">HEADING_MIT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"li"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"exco%d\""</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indexblack"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"b"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::link_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Chapter %S: "</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Section %S: "</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP7" class="function-link"><span class="function-syntax">DocumentationRenderer::link_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">md</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Markdown::render_extended</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="7-dim.html#SP1" class="function-link"><span class="function-syntax">DocumentationInMarkdown::extension_flavoured_Markdown</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"b"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"li"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">example_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="constant-syntax">INFORM_EXAMPLE_HEADING_MIT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"li"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"exco%d\""</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_example</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_example</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_example</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_example</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">user_state</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">, </span><span class="string-syntax">"style=\"text-decoration: none\" href=\"eg%d.html#eg%d\""</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">number</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indexblack"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">link</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Example %c &amp;mdash; "</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">letter</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"li"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">; </span><span class="identifier-syntax">ch</span><span class="plain-syntax">; </span><span class="identifier-syntax">ch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP7" class="function-link"><span class="function-syntax">DocumentationRenderer::render_toc_r</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">+1);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_body</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_body</span></span>:<br/><a href="7-dr.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"documentation\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::traverse_from</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, &amp;</span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::body_visitor</span></a><span class="plain-syntax">, (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_example</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_example</span></span>:<br/><a href="7-dr.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">eg</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_example</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_example</span></span>:<br/><a href="7-dr.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">eg</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">EN</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP16" class="function-link"><span class="function-syntax">DocumentationTree::find_example</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">eg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">EN</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">alt_EN</span><span class="plain-syntax"> = </span><a href="7-dim.html#SP7" class="function-link"><span class="function-syntax">DocumentationInMarkdown::find_example</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">alt_tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">eg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">alt_EN</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Example %d is missing"</span><span class="plain-syntax">, </span><span class="identifier-syntax">eg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP9" class="function-link"><span class="function-syntax">DocumentationRenderer::render_example_heading</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">EN</span><span class="plain-syntax">, </span><span class="identifier-syntax">EN</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_example</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_example</span><span class="plain-syntax">(</span><span class="identifier-syntax">alt_EN</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">user_state</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dim.html#SP5" class="function-link"><span class="function-syntax">DocumentationInMarkdown::render_example_heading</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">alt_EN</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Enter the small print</span><span class="named-paragraph-number">4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"This example is drawn from "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Enter the small print</span><span class="named-paragraph-number">3.1</span></a></span><span class="plain-syntax">;</span>
<span class="comment-syntax"> WRITE("This example is drawn from ");</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">H</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EN</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parent</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">heading_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_heading</span><span class="plain-syntax">(</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cdoc_heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_heading</span><span class="plain-syntax">(</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::link_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Chapter %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP7" class="function-link"><span class="function-syntax">DocumentationRenderer::link_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Chapter %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">count</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::link_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Section %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP7" class="function-link"><span class="function-syntax">DocumentationRenderer::link_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Section %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">count</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"href=\"index.html\""</span><span class="plain-syntax">);</span>
@ -445,374 +380,43 @@ in a hierarchical fashion.
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP4_2" class="named-paragraph-link"><span class="named-paragraph">Exit the small print</span><span class="named-paragraph-number">4.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax">*/</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP3_2" class="named-paragraph-link"><span class="named-paragraph">Exit the small print</span><span class="named-paragraph-number">3.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_chapter</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_chapter</span></span>:<br/><a href="7-dr.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ch</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_chapter</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_chapter</span></span>:<br/><a href="7-dr.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ch</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CN</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP16" class="function-link"><span class="function-syntax">DocumentationTree::find_chapter</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">CN</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Chapter %d is missing"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::render_body</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">CN</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">wanted</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">wanted</span><span class="plain-syntax">, </span><span class="string-syntax">"Chapter %d:"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">md</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">alt_tree</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rendering</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">md</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">HEADING_MIT</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Markdown::get_heading_level</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">) == </span><span class="constant-syntax">1</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::begins_with</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">wanted</span><span class="plain-syntax">)) { </span><span class="identifier-syntax">rendering</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="identifier-syntax">found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">rendering</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rendering</span><span class="plain-syntax">) </span><span class="identifier-syntax">Markdown::render_extended</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">md</span><span class="plain-syntax">, </span><a href="7-dim.html#SP1" class="function-link"><span class="function-syntax">DocumentationInMarkdown::extension_flavoured_Markdown</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">md</span><span class="plain-syntax"> = </span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">found</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Chapter %d is missing"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::body_visitor</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::body_visitor</span></span>:<br/><a href="7-dr.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">state</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">state</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">heading_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">H</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_heading</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">level</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_1" class="named-paragraph-link"><span class="named-paragraph">Typeset the heading of this chapter or section</span><span class="named-paragraph-number">8.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">example_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP9" class="function-link"><span class="function-syntax">DocumentationRenderer::render_example_heading</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">source_error_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_source_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_source_error</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"documentationerrorbox\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"documentationerror"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Error: "</span><span class="plain-syntax">); </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">error_message</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">phrase_defn_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"definition\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"defnprototype\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_phrase_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_phrase_defn</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"b"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">bl</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;Str::len(P-&gt;</span><span class="element-syntax">prototype</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">prototype</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'('</span><span class="plain-syntax">) { </span><span class="identifier-syntax">bl</span><span class="plain-syntax">++; </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bl</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"b"</span><span class="plain-syntax">); }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">')'</span><span class="plain-syntax">) { </span><span class="identifier-syntax">bl</span><span class="plain-syntax">--; </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bl</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"b"</span><span class="plain-syntax">); }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bl</span><span class="plain-syntax"> &lt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"b"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::traverse_from</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">, &amp;</span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::body_visitor</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">state</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">paragraph_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_paragraph</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_paragraph</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">code_sample_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_code_sample</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_code_sample</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"blockquote"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">with_paste_marker</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_2" class="named-paragraph-link"><span class="named-paragraph">Render the paste icon</span><span class="named-paragraph-number">8.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_3" class="named-paragraph-link"><span class="named-paragraph">Render the body of the code sample</span><span class="named-paragraph-number">8.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"blockquote"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8_1" class="paragraph-anchor"></a><b>&#167;8.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Typeset the heading of this chapter or section</span><span class="named-paragraph-number">8.1</span></span><span class="comment-syntax"> =</span>
</p>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"hr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"h2"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indexdullred"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"h3"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">, </span><span class="string-syntax">"id=docsec%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ID</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Chapter %S: "</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Section %S: "</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"h2"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"h3"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_2" class="paragraph-anchor"></a><b>&#167;8.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Render the paste icon</span><span class="named-paragraph-number">8.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">matter</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">M</span><span class="plain-syntax"> = </span><span class="identifier-syntax">N</span><span class="plain-syntax">; </span><span class="identifier-syntax">M</span><span class="plain-syntax">; ) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">M</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">code_sample_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_code_sample</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_code_sample</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">M</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">; </span><span class="identifier-syntax">C</span><span class="plain-syntax">; </span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_code_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_code_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;L-&gt;</span><span class="element-syntax">indentation</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">matter</span><span class="plain-syntax">, </span><span class="string-syntax">"\t"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">matter</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">matter</span><span class="plain-syntax">, </span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">M</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">continuation</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">M</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">matter</span><span class="plain-syntax">, </span><span class="string-syntax">"\n\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="7-tm.html#SP9" class="function-link"><span class="function-syntax">ExtensionWebsite::paste_button</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">matter</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">matter</span><span class="plain-syntax">)</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_3" class="paragraph-anchor"></a><b>&#167;8.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Render the body of the code sample</span><span class="named-paragraph-number">8.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">programming_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">language</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pl</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Painter::reset_syntax_colouring</span><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">; </span><span class="identifier-syntax">C</span><span class="plain-syntax">; </span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_code_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_code_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Painter::syntax_colour</span><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">colouring</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">language_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Inform"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ts</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">; </span><span class="identifier-syntax">C</span><span class="plain-syntax">; </span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_code_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_code_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;Str::len(L-&gt;</span><span class="element-syntax">colouring</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">colouring</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">) == </span><span class="identifier-syntax">STRING_COLOUR</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'['</span><span class="plain-syntax">) </span><span class="identifier-syntax">ts</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ts</span><span class="plain-syntax">) </span><span class="identifier-syntax">Str::put_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">colouring</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">EXTRACT_COLOUR</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">']'</span><span class="plain-syntax">) </span><span class="identifier-syntax">ts</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">ts</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indexdullblue"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tabulating</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">; </span><span class="identifier-syntax">C</span><span class="plain-syntax">; </span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_code_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_code_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabular</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tabulating</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_3_4" class="named-paragraph-link"><span class="named-paragraph">Begin new row of I7 table in extension documentation</span><span class="named-paragraph-number">8.3.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_3_1" class="named-paragraph-link"><span class="named-paragraph">Begin I7 table in extension documentation</span><span class="named-paragraph-number">8.3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tabulating</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cell_from</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">cell_to</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_3_3" class="named-paragraph-link"><span class="named-paragraph">Begin table cell for I7 table in extension documentation</span><span class="named-paragraph-number">8.3.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;Str::len(L-&gt;</span><span class="identifier-syntax">content</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">) == </span><span class="character-syntax">'\t'</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_3_2" class="named-paragraph-link"><span class="named-paragraph">End table cell for I7 table in extension documentation</span><span class="named-paragraph-number">8.3.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">) == </span><span class="character-syntax">'\t'</span><span class="plain-syntax">) </span><span class="identifier-syntax">i</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_3_3" class="named-paragraph-link"><span class="named-paragraph">Begin table cell for I7 table in extension documentation</span><span class="named-paragraph-number">8.3.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">--;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cell_to</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_3_2" class="named-paragraph-link"><span class="named-paragraph">End table cell for I7 table in extension documentation</span><span class="named-paragraph-number">8.3.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_3_5" class="named-paragraph-link"><span class="named-paragraph">End row of I7 table in extension documentation</span><span class="named-paragraph-number">8.3.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tabulating</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_3_6" class="named-paragraph-link"><span class="named-paragraph">End I7 table in extension documentation</span><span class="named-paragraph-number">8.3.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tabulating</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;L-&gt;</span><span class="element-syntax">indentation</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP11" class="function-link"><span class="function-syntax">DocumentationRenderer::syntax_coloured_code</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">colouring</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_code_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">)-&gt;</span><span class="element-syntax">tabular</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"br"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tabulating</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_3_6" class="named-paragraph-link"><span class="named-paragraph">End I7 table in extension documentation</span><span class="named-paragraph-number">8.3.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_3_1" class="paragraph-anchor"></a><b>&#167;8.3.1. </b>Unsurprisingly, I7 tables are set (after their titling lines) as HTML tables,
and this is fiddly but elementary in the usual way of HTML tables:
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin I7 table in extension documentation</span><span class="named-paragraph-number">8.3.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"br"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_plain_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::first_html_column</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP8_3">&#167;8.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_3_2" class="paragraph-anchor"></a><b>&#167;8.3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">End table cell for I7 table in extension documentation</span><span class="named-paragraph-number">8.3.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="7-dr.html#SP11" class="function-link"><span class="function-syntax">DocumentationRenderer::syntax_coloured_code</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">colouring</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cell_from</span><span class="plain-syntax">, </span><span class="identifier-syntax">cell_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::next_html_column</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP8_3">&#167;8.3</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP8_3_3" class="paragraph-anchor"></a><b>&#167;8.3.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin table cell for I7 table in extension documentation</span><span class="named-paragraph-number">8.3.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">cell_from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="identifier-syntax">cell_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cell_from</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indexdullblue"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP8_3">&#167;8.3</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP8_3_4" class="paragraph-anchor"></a><b>&#167;8.3.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin new row of I7 table in extension documentation</span><span class="named-paragraph-number">8.3.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::first_html_column</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP8_3">&#167;8.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_3_5" class="paragraph-anchor"></a><b>&#167;8.3.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">End row of I7 table in extension documentation</span><span class="named-paragraph-number">8.3.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_html_row</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP8_3">&#167;8.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_3_6" class="paragraph-anchor"></a><b>&#167;8.3.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">End I7 table in extension documentation</span><span class="named-paragraph-number">8.3.6</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indexdullblue"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP8_3">&#167;8.3</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>An example is set with a two-table header, and followed optionally by a
table of its inset copy, shaded to distinguish it from the rest of the
page. The heading is constructed with a main table of one row of two cells,
in the following section. The left-hand cell then contains a further table,
in the next section.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_example_heading</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_example_heading</span></span>:<br/><a href="7-dr.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">EN</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">passage_node</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_example</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_example</span><span class="plain-syntax">(</span><span class="identifier-syntax">EN</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">, </span><span class="string-syntax">"style=\"text-decoration: none\" href=\"eg%d.html\""</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"hr"</span><span class="plain-syntax">); </span><span class="comment-syntax"> rule a line before the example heading</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_plain_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"tr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> Left hand cell: the oval icon</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">, </span><span class="string-syntax">"halign=\"left\" valign=\"top\" cellpadding=0 cellspacing=0 width=38px"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">, </span><span class="string-syntax">"id=eg%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">number</span><span class="plain-syntax">); </span><span class="comment-syntax"> provide the anchor point</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP9_1" class="named-paragraph-link"><span class="named-paragraph">Typeset the lettered oval example icon</span><span class="named-paragraph-number">9.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">); </span><span class="comment-syntax"> end the textual link</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> Right hand cell: the asterisks and title, with rubric underneath</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">, </span><span class="string-syntax">"cellpadding=0 cellspacing=0 halign=\"left\" valign=\"top\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">passage_node</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">link</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">asterisk</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">asterisk</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">star_count</span><span class="plain-syntax">; </span><span class="identifier-syntax">asterisk</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">(</span><span class="constant-syntax">0x2605</span><span class="plain-syntax">); </span><span class="comment-syntax"> the Unicode for "black star" emoji</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> or 0x2B50 is the Unicode for "star" emoji</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> or again, could use the asterisk.png image in the app</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;nbsp; "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"b"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indexdarkgrey"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;nbsp;Example&amp;nbsp;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indexblack"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"br"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">description</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"b"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">passage_node</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">); </span><span class="comment-syntax"> Link does not cover body, only heading</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">passage_node</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::traverse_from</span><span class="plain-syntax">(</span><span class="identifier-syntax">passage_node</span><span class="plain-syntax">, &amp;</span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::body_visitor</span></a><span class="plain-syntax">, (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"tr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">)</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP9_1" class="paragraph-anchor"></a><b>&#167;9.1. </b>The little oval icon with its superimposed boldface letter is much harder to
get right on all browsers than it looks, and the following is the result of
some pretty grim experimentation. Basically, we make a tight, borderless,
one-cell-in-one-row table, use CSS to make a transparent PNG image of an oval
the background image for the table, then put a boldface letter in the centre
of its one and only cell. (Things were even worse when IE6 for Windows still
had its infamous PNG transparency bug.)
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Typeset the lettered oval example icon</span><span class="named-paragraph-number">9.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_plain_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"tr"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"oval\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">, </span><span class="string-syntax">"width=38px height=30px align=\"left\" valign=\"center\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">passage_node</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">link</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"class=\"paragraph Body\" style=\"line-height: 1px; margin-bottom: 0px; "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"margin-top: 0px; padding-bottom: 0pt; padding-top: 0px; text-align: center;\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"extensionexampleletter"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">letter</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">passage_node</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"tr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_text</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_text</span></span>:<br/><a href="7-dr.html#SP4">&#167;4</a>, <a href="7-dr.html#SP7">&#167;7</a>, <a href="7-dr.html#SP8">&#167;8</a>, <a href="7-dr.html#SP8_1">&#167;8.1</a>, <a href="7-dr.html#SP8_2">&#167;8.2</a>, <a href="7-dr.html#SP9">&#167;9</a><br/>The Mini-Website - <a href="7-tm.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_text</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_text</span></span>:<br/><a href="7-dr.html#SP3">&#167;3</a>, <a href="7-dr.html#SP6">&#167;6</a>, <a href="7-dr.html#SP7">&#167;7</a><br/>The Mini-Website - <a href="7-tm.html#SP8">&#167;8</a><br/>Documentation in Markdown - <a href="7-dim.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">md</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Markdown::parse_inline</span><span class="plain-syntax">(</span><span class="identifier-syntax">text</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"markdowncontent\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Markdown::render</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">md</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::syntax_coloured_code</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::syntax_coloured_code</span></span>:<br/><a href="7-dr.html#SP8_3">&#167;8.3</a>, <a href="7-dr.html#SP8_3_2">&#167;8.3.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">colouring</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">current_col</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=</span><span class="identifier-syntax">from</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">to</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">col</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">colouring</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">col</span><span class="plain-syntax"> != </span><span class="identifier-syntax">current_col</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_col</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">col</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">DEFINITION_COLOUR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntaxdefinition"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">FUNCTION_COLOUR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntaxfunction"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">RESERVED_COLOUR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntaxreserved"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">ELEMENT_COLOUR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntaxelement"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">IDENTIFIER_COLOUR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntaxidentifier"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CHARACTER_COLOUR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntaxcharacter"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONSTANT_COLOUR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntaxconstant"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">STRING_COLOUR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntaxstring"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PLAIN_COLOUR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntaxplain"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">EXTRACT_COLOUR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntaxextract"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">COMMENT_COLOUR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">span_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntaxcomment"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"%S\""</span><span class="plain-syntax">, </span><span class="identifier-syntax">span_class</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_col</span><span class="plain-syntax"> = </span><span class="identifier-syntax">col</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_col</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="7-dc.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresssection"><a href="7-tm.html">tm</a></li><li class="progresssection"><a href="7-eip.html">eip</a></li><li class="progresssection"><a href="7-ti.html">ti</a></li><li class="progresssection"><a href="7-tc.html">tc</a></li><li class="progresssection"><a href="7-dt.html">dt</a></li><li class="progresssection"><a href="7-dc.html">dc</a></li><li class="progresscurrent">dr</li><li class="progressnextoff">&#10095;</li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="7-dc.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresssection"><a href="7-tm.html">tm</a></li><li class="progresssection"><a href="7-eip.html">eip</a></li><li class="progresssection"><a href="7-ti.html">ti</a></li><li class="progresssection"><a href="7-tc.html">tc</a></li><li class="progresssection"><a href="7-dc.html">dc</a></li><li class="progresscurrent">dr</li><li class="progresssection"><a href="7-dim.html">dim</a></li><li class="progressnext"><a href="7-dim.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -874,7 +874,7 @@ handed to <span class="extract"><span class="extract-syntax">qsort</span></span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="7-tm.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresssection"><a href="7-tm.html">tm</a></li><li class="progresscurrent">eip</li><li class="progresssection"><a href="7-ti.html">ti</a></li><li class="progresssection"><a href="7-tc.html">tc</a></li><li class="progresssection"><a href="7-dt.html">dt</a></li><li class="progresssection"><a href="7-dc.html">dc</a></li><li class="progresssection"><a href="7-dr.html">dr</a></li><li class="progressnext"><a href="7-ti.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="7-tm.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresssection"><a href="7-tm.html">tm</a></li><li class="progresscurrent">eip</li><li class="progresssection"><a href="7-ti.html">ti</a></li><li class="progresssection"><a href="7-tc.html">tc</a></li><li class="progresssection"><a href="7-dc.html">dc</a></li><li class="progresssection"><a href="7-dr.html">dr</a></li><li class="progresssection"><a href="7-dim.html">dim</a></li><li class="progressnext"><a href="7-ti.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -330,7 +330,7 @@ are legal.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="7-ti.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresssection"><a href="7-tm.html">tm</a></li><li class="progresssection"><a href="7-eip.html">eip</a></li><li class="progresssection"><a href="7-ti.html">ti</a></li><li class="progresscurrent">tc</li><li class="progresssection"><a href="7-dt.html">dt</a></li><li class="progresssection"><a href="7-dc.html">dc</a></li><li class="progresssection"><a href="7-dr.html">dr</a></li><li class="progressnext"><a href="7-dt.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="7-ti.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresssection"><a href="7-tm.html">tm</a></li><li class="progresssection"><a href="7-eip.html">eip</a></li><li class="progresssection"><a href="7-ti.html">ti</a></li><li class="progresscurrent">tc</li><li class="progresssection"><a href="7-dc.html">dc</a></li><li class="progresssection"><a href="7-dr.html">dr</a></li><li class="progresssection"><a href="7-dim.html">dim</a></li><li class="progressnext"><a href="7-dc.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -877,7 +877,7 @@ produces a second report.
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-ti.html#SP7">&#167;7</a> (twice).</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="7-eip.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresssection"><a href="7-tm.html">tm</a></li><li class="progresssection"><a href="7-eip.html">eip</a></li><li class="progresscurrent">ti</li><li class="progresssection"><a href="7-tc.html">tc</a></li><li class="progresssection"><a href="7-dt.html">dt</a></li><li class="progresssection"><a href="7-dc.html">dc</a></li><li class="progresssection"><a href="7-dr.html">dr</a></li><li class="progressnext"><a href="7-tc.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="7-eip.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresssection"><a href="7-tm.html">tm</a></li><li class="progresssection"><a href="7-eip.html">eip</a></li><li class="progresscurrent">ti</li><li class="progresssection"><a href="7-tc.html">tc</a></li><li class="progresssection"><a href="7-dc.html">dc</a></li><li class="progresssection"><a href="7-dr.html">dr</a></li><li class="progresssection"><a href="7-dim.html">dim</a></li><li class="progressnext"><a href="7-tc.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -237,7 +237,7 @@ examples provided in the extension.
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-tm.html#SP7_1" class="named-paragraph-link"><span class="named-paragraph">Add internals</span><span class="named-paragraph-number">7.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">details</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP3" class="function-link"><span class="function-syntax">DocumentationRenderer::as_HTML</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">doc</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP2" class="function-link"><span class="function-syntax">DocumentationRenderer::as_HTML</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">doc</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">documented_on_this_run</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
@ -257,10 +257,10 @@ examples provided in the extension.
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"can be read here"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">MD</span><span class="plain-syntax"> = </span><a href="7-dr.html#SP2" class="function-link"><span class="function-syntax">DocumentationRenderer::open_subpage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"metadata.html"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">MD</span><span class="plain-syntax"> = </span><a href="7-dr.html#SP1" class="function-link"><span class="function-syntax">DocumentationRenderer::open_subpage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"metadata.html"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="string-syntax">"%X"</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP6" class="function-link"><span class="function-syntax">DocumentationRenderer::render_header</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">MD</span><span class="plain-syntax">, </span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Metadata"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP5" class="function-link"><span class="function-syntax">DocumentationRenderer::render_header</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">MD</span><span class="plain-syntax">, </span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Metadata"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="7-tm.html#SP8" class="function-link"><span class="function-syntax">ExtensionWebsite::write_metadata_page</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">MD</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax">);</span>
@ -272,7 +272,7 @@ examples provided in the extension.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-tm.html#SP7_1_1" class="named-paragraph-link"><span class="named-paragraph">Link to documentation on K</span><span class="named-paragraph-number">7.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP2" class="function-link"><span class="function-syntax">DocumentationRenderer::close_subpage</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP1" class="function-link"><span class="function-syntax">DocumentationRenderer::close_subpage</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">kits</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_kit</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><a href="5-ks.html#SP8" class="function-link"><span class="function-syntax">Kits::find_by_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">raw_title</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-tm.html#SP7_1_2" class="named-paragraph-link"><span class="named-paragraph">Create documentation on K</span><span class="named-paragraph-number">7.1.2</span></a></span><span class="plain-syntax">;</span>
@ -299,18 +299,18 @@ examples provided in the extension.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Pathnames::create_in_file_system</span><span class="plain-syntax">(</span><span class="identifier-syntax">KP</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">KD</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">location_if_path</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Documentation"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">doc</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP2" class="function-link"><span class="function-syntax">DocumentationCompiler::compile_from_path</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">KD</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP3" class="function-link"><span class="function-syntax">DocumentationCompiler::compile_from_path</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">KD</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">doc</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="7-dr.html#SP2" class="function-link"><span class="function-syntax">DocumentationRenderer::open_subpage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">KP</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"index.html"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP6" class="function-link"><span class="function-syntax">DocumentationRenderer::render_header</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="7-dr.html#SP1" class="function-link"><span class="function-syntax">DocumentationRenderer::open_subpage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">KP</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"index.html"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP5" class="function-link"><span class="function-syntax">DocumentationRenderer::render_header</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"The kit %S does not provide any internal documentation."</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP2" class="function-link"><span class="function-syntax">DocumentationRenderer::close_subpage</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP1" class="function-link"><span class="function-syntax">DocumentationRenderer::close_subpage</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">doc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">within_extension</span><span class="plain-syntax"> = </span><span class="identifier-syntax">E</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP3" class="function-link"><span class="function-syntax">DocumentationRenderer::as_HTML</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">KP</span><span class="plain-syntax">, </span><span class="identifier-syntax">doc</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP2" class="function-link"><span class="function-syntax">DocumentationRenderer::as_HTML</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">KP</span><span class="plain-syntax">, </span><span class="identifier-syntax">doc</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
@ -339,20 +339,20 @@ examples provided in the extension.
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">EXW_breakcrumb_URLs</span><span class="plain-syntax">[5] = { </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> };</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">no_EXW_breadcrumbs</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionWebsite::add_home_breadcrumb</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">ExtensionWebsite::add_home_breadcrumb</span></span>:<br/>Extensions Index Page - <a href="7-eip.html#SP1_2">&#167;1.2</a><br/>The Installer - <a href="7-ti.html#SP1">&#167;1</a><br/>Documentation Renderer - <a href="7-dr.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">title</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionWebsite::add_home_breadcrumb</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">ExtensionWebsite::add_home_breadcrumb</span></span>:<br/>Extensions Index Page - <a href="7-eip.html#SP1_2">&#167;1.2</a><br/>The Installer - <a href="7-ti.html#SP1">&#167;1</a><br/>Documentation Renderer - <a href="7-dr.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">title</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">title</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">title</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"Extensions"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="7-tm.html#SP8" class="function-link"><span class="function-syntax">ExtensionWebsite::add_breadcrumb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"inform:/Extensions/Reserved/Documentation/Extensions.html"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionWebsite::add_breadcrumb</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">ExtensionWebsite::add_breadcrumb</span></span>:<br/>The Installer - <a href="7-ti.html#SP1">&#167;1</a><br/>Documentation Renderer - <a href="7-dr.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">URL</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionWebsite::add_breadcrumb</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">ExtensionWebsite::add_breadcrumb</span></span>:<br/>The Installer - <a href="7-ti.html#SP1">&#167;1</a><br/>Documentation Renderer - <a href="7-dr.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">URL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">no_EXW_breadcrumbs</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">5</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"too many breadcrumbs"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EXW_breadcrumb_titles</span><span class="plain-syntax">[</span><span class="identifier-syntax">no_EXW_breadcrumbs</span><span class="plain-syntax">] = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EXW_breakcrumb_URLs</span><span class="plain-syntax">[</span><span class="identifier-syntax">no_EXW_breadcrumbs</span><span class="plain-syntax">] = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">URL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">no_EXW_breadcrumbs</span><span class="plain-syntax">++;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionWebsite::titling_and_navigation</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">ExtensionWebsite::titling_and_navigation</span></span>:<br/>Extensions Index Page - <a href="7-eip.html#SP1_2">&#167;1.2</a><br/>The Installer - <a href="7-ti.html#SP1">&#167;1</a><br/>Documentation Renderer - <a href="7-dr.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subtitle</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionWebsite::titling_and_navigation</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">ExtensionWebsite::titling_and_navigation</span></span>:<br/>Extensions Index Page - <a href="7-eip.html#SP1_2">&#167;1.2</a><br/>The Installer - <a href="7-ti.html#SP1">&#167;1</a><br/>Documentation Renderer - <a href="7-dr.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subtitle</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"headingpanellayout headingpanelalt\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"headingtext\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"headingpaneltextalt"</span><span class="plain-syntax">);</span>
@ -361,7 +361,7 @@ examples provided in the extension.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">i</span><span class="plain-syntax"> != </span><span class="identifier-syntax">no_EXW_breadcrumbs</span><span class="plain-syntax">-1) &amp;&amp; (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">EXW_breakcrumb_URLs</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"href=\"%S\" class=\"registrycontentslink\""</span><span class="plain-syntax">, </span><span class="identifier-syntax">EXW_breakcrumb_URLs</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">EXW_breadcrumb_titles</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">EXW_breadcrumb_titles</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">i</span><span class="plain-syntax"> != </span><span class="identifier-syntax">no_EXW_breadcrumbs</span><span class="plain-syntax">-1) &amp;&amp; (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">EXW_breakcrumb_URLs</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
@ -370,7 +370,7 @@ examples provided in the extension.
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"headingrubric\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"headingpanelrubricalt"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">subtitle</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">subtitle</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
@ -382,7 +382,7 @@ a somewhat enigmatic icon.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionWebsite::paste_button</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">ExtensionWebsite::paste_button</span></span>:<br/>Extensions Index Page - <a href="7-eip.html#SP1_2_2_4_4_1">&#167;1.2.2.4.4.1</a><br/>The Installer - <a href="7-ti.html#SP2_5_2">&#167;2.5.2</a><br/>Documentation Renderer - <a href="7-dr.html#SP8_2">&#167;8.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">matter</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionWebsite::paste_button</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">ExtensionWebsite::paste_button</span></span>:<br/>Extensions Index Page - <a href="7-eip.html#SP1_2_2_4_4_1">&#167;1.2.2.4.4.1</a><br/>The Installer - <a href="7-ti.html#SP2_5_2">&#167;2.5.2</a><br/>Documentation in Markdown - <a href="7-dim.html#SP7_2">&#167;7.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">matter</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">paste</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="7-tm.html#SP9" class="function-link"><span class="function-syntax">ExtensionWebsite::paste_ideograph</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">paste</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PasteButtons::paste_text_using</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">matter</span><span class="plain-syntax">, </span><span class="identifier-syntax">paste</span><span class="plain-syntax">);</span>
@ -395,7 +395,7 @@ a somewhat enigmatic icon.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="6-vmg.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresscurrent">tm</li><li class="progresssection"><a href="7-eip.html">eip</a></li><li class="progresssection"><a href="7-ti.html">ti</a></li><li class="progresssection"><a href="7-tc.html">tc</a></li><li class="progresssection"><a href="7-dt.html">dt</a></li><li class="progresssection"><a href="7-dc.html">dc</a></li><li class="progresssection"><a href="7-dr.html">dr</a></li><li class="progressnext"><a href="7-eip.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="6-vmg.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresscurrent">tm</li><li class="progresssection"><a href="7-eip.html">eip</a></li><li class="progresssection"><a href="7-ti.html">ti</a></li><li class="progresssection"><a href="7-tc.html">tc</a></li><li class="progresssection"><a href="7-dc.html">dc</a></li><li class="progresssection"><a href="7-dr.html">dr</a></li><li class="progresssection"><a href="7-dim.html">dim</a></li><li class="progressnext"><a href="7-eip.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -320,11 +320,6 @@
<spon class="sectiontitle">The Converter</span></a> -
<span class="sectionpurpose">To convert an extension from the traditional one-file format to the more modern directory-based format.</span></p>
</li>
<li>
<p class="sectionentry"><a href="7-dt.html">
<spon class="sectiontitle">Documentation Tree</span></a> -
<span class="sectionpurpose">A data structure to hold segments of Inform resource documentation.</span></p>
</li>
<li>
<p class="sectionentry"><a href="7-dc.html">
<spon class="sectiontitle">Documentation Compiler</span></a> -
@ -335,6 +330,11 @@
<spon class="sectiontitle">Documentation Renderer</span></a> -
<span class="sectionpurpose">To render a passage of extension documentation as HTML.</span></p>
</li>
<li>
<p class="sectionentry"><a href="7-dim.html">
<spon class="sectiontitle">Documentation in Markdown</span></a> -
<span class="sectionpurpose">To provide a variation on Markdown for extension documentation.</span></p>
</li>
</ul>
</li>
</ul>

View file

@ -15,14 +15,7 @@ which use this module:
@e build_skill_CLASS
@e build_step_CLASS
@e build_vertex_CLASS
@e cdoc_heading_CLASS
@e cdoc_example_CLASS
@e cdoc_passage_CLASS
@e cdoc_phrase_defn_CLASS
@e cdoc_paragraph_CLASS
@e cdoc_code_sample_CLASS
@e cdoc_code_line_CLASS
@e cdoc_source_error_CLASS
@e compiled_documentation_CLASS
@e control_structure_phrase_CLASS
@e copy_error_CLASS
@ -55,14 +48,7 @@ DECLARE_CLASS(build_script)
DECLARE_CLASS(build_skill)
DECLARE_CLASS(build_step)
DECLARE_CLASS(build_vertex)
DECLARE_CLASS(cdoc_heading)
DECLARE_CLASS(cdoc_example)
DECLARE_CLASS(cdoc_passage)
DECLARE_CLASS(cdoc_phrase_defn)
DECLARE_CLASS(cdoc_paragraph)
DECLARE_CLASS(cdoc_code_sample)
DECLARE_CLASS(cdoc_code_line)
DECLARE_CLASS(cdoc_source_error)
DECLARE_CLASS(control_structure_phrase)
DECLARE_CLASS(compiled_documentation)
DECLARE_CLASS(copy_error)

View file

@ -3,7 +3,7 @@
To compile documentation from the textual syntax in an extension into a tree.
@ We will actually wrap the result in the following structure, but
it's really not much more than the tree produced by //Documentation Tree//:
it's really not much more than a tree of Markdown:
=
typedef struct compiled_documentation {
@ -11,7 +11,7 @@ typedef struct compiled_documentation {
struct text_stream *original;
struct inform_extension *associated_extension;
struct inform_extension *within_extension;
struct heterogeneous_tree *tree;
struct markdown_item *alt_tree;
int total_headings[3];
int total_examples;
int empty;
@ -25,7 +25,7 @@ compiled_documentation *DocumentationCompiler::new_wrapper(text_stream *source)
cd->original = Str::duplicate(source);
cd->associated_extension = NULL;
cd->within_extension = NULL;
cd->tree = DocumentationTree::new();
cd->alt_tree = NULL;
cd->total_examples = 0;
cd->total_headings[0] = 1;
cd->total_headings[1] = 0;
@ -46,6 +46,29 @@ typedef struct satellite_test_case {
CLASS_DEFINITION
} satellite_test_case;
@ Lettered examples have a "difficulty rating" in stars, 0 to 4. Numbers are unique
from 1, 2, ...; letters are unique from A, B, C, ...
=
typedef struct cdoc_example {
struct text_stream *name;
struct text_stream *description;
int star_count;
int number;
char letter;
CLASS_DEFINITION
} cdoc_example;
cdoc_example *DocumentationCompiler::new_example_alone(text_stream *title, text_stream *desc, int star_count, int ecount) {
cdoc_example *E = CREATE(cdoc_example);
E->name = Str::duplicate(title);
E->description = Str::duplicate(desc);
E->star_count = star_count;
E->number = ecount;
E->letter = 'A' + (char) ecount - 1;
return E;
}
@ We can compile either from a file...
=
@ -112,8 +135,7 @@ typedef struct example_scanning_state {
struct text_stream *body_text;
struct text_stream *placement;
struct text_stream *desc;
struct linked_list *errors;
struct heterogeneous_tree *tree;
struct linked_list *errors; /* of |markdown_item| */
struct text_stream *scanning;
int past_header;
} example_scanning_state;
@ -125,58 +147,66 @@ typedef struct example_scanning_state {
ess.body_text = Str::new();
ess.placement = NULL;
ess.desc = NULL;
ess.errors = NEW_LINKED_LIST(tree_node);
ess.tree = cd->tree;
ess.errors = NEW_LINKED_LIST(markdown_item);
ess.past_header = FALSE;
ess.scanning = Str::new(); WRITE_TO(ess.scanning, "%S", Filenames::get_leafname(stc->test_file));
TextFiles::read(stc->test_file, FALSE, "unable to read file of example", TRUE,
&DocumentationCompiler::read_example_helper, NULL, &ess);
tree_node *placement_node = NULL;
markdown_item *alt_placement_node = NULL;
if (Str::len(ess.placement) == 0) {
placement_node = cd->tree->root;
;
} else {
placement_node = DocumentationTree::find_section(cd->tree, ess.placement);
if (placement_node == NULL) {
alt_placement_node = DocumentationInMarkdown::find_section(cd->alt_tree, ess.placement);
LOG("Looking for %S.\n", ess.placement);
if (alt_placement_node == NULL) {
DocumentationCompiler::example_error(&ess,
I"example gives a Location which is not the name of any section");
}
}
if (Str::len(ess.desc) == 0) {
DocumentationCompiler::example_error(&ess,
I"example does not give its Description");
}
tree_node *content_node = NULL;
if (Str::len(ess.body_text) == 0) {
cdoc_example *eg = DocumentationCompiler::new_example_alone(
ess.long_title, ess.desc, ess.star_count, ++(cd->total_examples));
markdown_item *eg_header = Markdown::new_item(INFORM_EXAMPLE_HEADING_MIT);
eg_header->user_state = STORE_POINTER_cdoc_example(eg);
markdown_item *md = alt_placement_node;
if (md == NULL) {
md = cd->alt_tree->down;
if (md == NULL) cd->alt_tree->down = eg_header;
else {
while ((md) && (md->next)) md = md->next;
eg_header->next = md->next; md->next = eg_header;
}
} else {
if (md->next) md = md->next;
while ((md) && (md->next) && (md->next->type != HEADING_MIT)) md = md->next;
eg_header->next = md->next; md->next = eg_header;
}
if (Str::len(ess.body_text) > 0) {
markdown_item *alt_ecd = Markdown::parse_extended(ess.body_text,
DocumentationInMarkdown::extension_flavoured_Markdown());
eg_header->down = alt_ecd->down;
Markdown::debug_subtree(DL, eg_header);
} else {
DocumentationCompiler::example_error(&ess,
I"example does not give any actual content");
} else {
compiled_documentation *ecd =
DocumentationCompiler::compile(ess.body_text, associated_extension);
if ((ecd) && (ecd->tree) && (ecd->tree->root) &&
(ecd->tree->root->child) &&
(ecd->tree->root->child->type == passage_TNT))
content_node = ecd->tree->root->child;
else {
DocumentationCompiler::example_error(&ess,
I"example file content is missing or wrongly set out");
}
}
tree_node *example_node = DocumentationTree::new_example(cd->tree,
ess.long_title, ess.desc, ess.star_count, ++(cd->total_examples));
if (placement_node) Trees::make_child(example_node, placement_node);
if (content_node) Trees::make_child(content_node, example_node);
}
tree_node *E;
LOOP_OVER_LINKED_LIST(E, tree_node, ess.errors)
Trees::make_child(E, cd->tree->root);
markdown_item *E;
LOOP_OVER_LINKED_LIST(E, markdown_item, ess.errors)
Markdown::add_to(E, cd->alt_tree);
@ =
void DocumentationCompiler::example_error(example_scanning_state *ess, text_stream *text) {
text_stream *err = Str::new();
WRITE_TO(err, "Example file '%S': %S", ess->scanning, text);
tree_node *E = DocumentationTree::new_source_error(ess->tree, err);
ADD_TO_LINKED_LIST(E, tree_node, ess->errors);
markdown_item *E = DocumentationInMarkdown::error_item(err);
ADD_TO_LINKED_LIST(E, markdown_item, ess->errors);
}
@ =
@ -255,345 +285,11 @@ compiled_documentation *DocumentationCompiler::compile(text_stream *source,
if (cd->associated_extension)
WRITE_TO(cd->title, "%X", cd->associated_extension->as_copy->edition->work);
if (Str::is_whitespace(source)) cd->empty = TRUE;
else @<Parse the source@>;
if (cd->empty) {
SVEXPLAIN(1, "(resulting tree is empty)\n");
} else {
SVEXPLAIN(1, "(resulting tree has %d chapter(s), %d section(s) and %d example(s))\n",
cd->total_headings[1], cd->total_headings[2], cd->total_examples);
}
else cd->alt_tree = Markdown::parse_extended(source,
DocumentationInMarkdown::extension_flavoured_Markdown());
return cd;
}
@ The source material is line-based, with semantic content sometimes spreading
across multiple lines, so we'll need to keep track of some state as we read
one line at a time:
@<Parse the source@> =
int chapter_number = 0, section_number = 0;
tree_node *current_headings[4]; /* Most recent headings of levels 0, 1, 2 */
current_headings[0] = cd->tree->root; /* This will never change */
current_headings[1] = NULL; /* Latest chapter, if any */
current_headings[2] = NULL; /* Latest section in most recent thing of lower level */
current_headings[3] = NULL; /* Latest example in most recent thing of lower level */
tree_node *current_passage = NULL, /* passage being assembled, if any */
*current_phrase_defn = NULL, /* again, if any */
*current_paragraph = NULL,
*current_code = NULL,
*last_paste_code = NULL; /* last code sample with a paste button */
int pending_code_sample_blanks = 0, code_is_tabular = FALSE; /* used only when assembling code samples */
programming_language *default_language = DocumentationCompiler::get_language(I"Inform");
programming_language *language = default_language;
@<Parse the source linewise@>;
@ Leading space on a line is removed but not ignored: it is converted into an
indentation level, measured as a tab count, using the exchange rate 4 spaces
to 1 tab.
@<Parse the source linewise@> =
TEMPORARY_TEXT(line)
int indentation = 0, space_count = 0;
for (int i=0; i<Str::len(source); i++) {
wchar_t c = Str::get_at(source, i);
if (c == '\n') {
@<Line read@>;
Str::clear(line);
indentation = 0; space_count = 0;
} else if ((Str::len(line) == 0) && (Characters::is_whitespace(c))) {
if (c == '\t') indentation++;
if (c == ' ') space_count++;
if (space_count == 4) { indentation++; space_count = 0; }
} else {
PUT_TO(line, c);
}
}
if (Str::len(line) > 0) @<Line read@>;
@<Check for runaway phrase definitions@>;
@<Complete passage if in one@>;
DISCARD_TEXT(line)
@ Trailing space is ignored and removed.
Lines which are unindented and take the following shapes are headings:
= (text)
Chapter: Survey and Prospecting
Section: Black Gold
Example: *** Gelignite Anderson - A Tale of the Texas Oilmen
=
where in each case the colon can equally be a hyphen, and with optional
space either side.
Otherwise, lines are divided into blanks, which always end paragraphs but
may either end or continue code samples; unindented lines, which are always
part of paragraphs; or indented ones, which are always part of code samples.
@<Line read@> =
Str::trim_white_space(line);
if (Str::len(line) == 0) {
if (current_paragraph) @<Complete paragraph or code@>;
if (current_code) @<Insert line break in code@>;
} else if (indentation == 0) {
match_results mr = Regexp::create_mr();
if ((Regexp::match(&mr, line, L"Section *: *(%c+?)")) ||
(Regexp::match(&mr, line, L"Section *- *(%c+?)"))) {
@<Insert a section heading@>;
} else if ((Regexp::match(&mr, line, L"Chapter *: *(%c+?)")) ||
(Regexp::match(&mr, line, L"Chapter *- *(%c+?)"))) {
@<Insert a chapter heading@>;
} else if ((Regexp::match(&mr, line, L"Example *: *(%**) *(%c+?)")) ||
(Regexp::match(&mr, line, L"Example *- *(%**) *(%c+?)"))) {
@<Insert an example heading@>;
} else if (Regexp::match(&mr, line, L"{defn *(%c*?)} *(%c+)")) {
@<Begin a phrase definition@>;
} else if (Regexp::match(&mr, line, L"{end}")) {
@<End a phrase definition@>;
} else {
if (current_paragraph == NULL) @<Begin paragraph@>;
@<Insert space in paragraph@>;
@<Insert line in paragraph@>;
}
Regexp::dispose_of(&mr);
} else {
if (current_code == NULL) {
if ((Str::get_at(line, 0) == '{') && (Str::get_at(line, 1) == 'a') &&
(Str::get_at(line, 2) == 's') && (Str::get_at(line, 3) == ' ') &&
(Str::get_at(line, Str::len(line)-1) == '}')) {
Str::delete_n_characters(line, 4);
Str::delete_last_character(line);
Str::trim_white_space(line);
language = DocumentationCompiler::get_language(line);
if (language == NULL) {
@<Complete paragraph or code@>;
@<Begin passage if not already in one@>;
TEMPORARY_TEXT(err)
WRITE_TO(err, "cannot find a language called '%S'", line);
tree_node *E = DocumentationTree::new_source_error(cd->tree, err);
Trees::make_child(E, current_passage);
DISCARD_TEXT(err)
}
} else {
@<Begin code@>;
@<Insert line in code sample@>;
}
} else {
@<Insert line in code sample@>;
}
}
@<Insert a chapter heading@> =
@<Complete passage if in one@>;
chapter_number++;
section_number = 0;
int level = 1, id = cd->total_headings[0] + cd->total_headings[1] + cd->total_headings[2];
cd->total_headings[1]++;
tree_node *new_node = DocumentationTree::new_heading(cd->tree, mr.exp[0], mr.exp[0], level,
id, chapter_number, section_number);
@<Place this new structural node in the tree@>;
@<Insert a section heading@> =
@<Complete passage if in one@>;
section_number++;
int level = 2, id = cd->total_headings[0] + cd->total_headings[1] + cd->total_headings[2];
cd->total_headings[2]++;
tree_node *new_node = DocumentationTree::new_heading(cd->tree, mr.exp[0], mr.exp[0], level,
id, chapter_number, section_number);
@<Place this new structural node in the tree@>;
@<Insert an example heading@> =
@<Complete passage if in one@>;
int level = 3, star_count = Str::len(mr.exp[0]);
tree_node *new_node = DocumentationTree::new_example(cd->tree, mr.exp[1], NULL,
star_count, ++(cd->total_examples));
@<Place this new structural node in the tree@>;
if (star_count == 0) {
@<Begin passage if not already in one@>;
tree_node *E = DocumentationTree::new_source_error(cd->tree,
I"this example should be marked (before the title) '*', '**', '***' or '****' for difficulty");
Trees::make_child(E, current_passage);
}
if (star_count > 4) {
@<Begin passage if not already in one@>;
tree_node *E = DocumentationTree::new_source_error(cd->tree,
I"four stars '****' is the maximum difficulty rating allowed");
Trees::make_child(E, current_passage);
}
@<Begin a phrase definition@> =
@<Check for runaway phrase definitions@>;
if (current_phrase_defn == NULL) {
@<Begin passage if not already in one@>;
@<Complete paragraph or code@>;
current_phrase_defn =
DocumentationTree::new_phrase_defn(cd->tree, mr.exp[0], mr.exp[1]);
Trees::make_child(current_phrase_defn, current_passage);
@<Complete passage if in one@>;
}
@<End a phrase definition@> =
if (current_phrase_defn) {
@<Complete passage if in one@>;
current_passage = current_phrase_defn->parent;
current_phrase_defn = NULL;
} else {
@<Begin passage if not already in one@>;
tree_node *E = DocumentationTree::new_source_error(cd->tree,
I"{end} without {defn}");
Trees::make_child(E, current_passage);
}
language = default_language;
@<Place this new structural node in the tree@> =
@<Check for runaway phrase definitions@>;
for (int j=level-1; j>=0; j--)
if (current_headings[j]) {
Trees::make_child(new_node, current_headings[j]);
break;
}
current_headings[level] = new_node;
for (int j=level+1; j<4; j++) current_headings[j] = NULL;
language = default_language;
@<Check for runaway phrase definitions@> =
if (current_phrase_defn) {
@<Begin passage if not already in one@>;
tree_node *E = DocumentationTree::new_source_error(cd->tree,
I"{defn} has no {end}");
Trees::make_child(E, current_passage);
current_phrase_defn = NULL;
}
@<Begin passage if not already in one@> =
if (current_passage == NULL) {
current_passage = DocumentationTree::new_passage(cd->tree);
if (current_phrase_defn)
Trees::make_child(current_passage, current_phrase_defn);
else for (int j=3; j>=0; j--)
if (current_headings[j]) {
Trees::make_child(current_passage, current_headings[j]);
break;
}
current_paragraph = NULL;
}
@<Complete passage if in one@> =
if (current_passage) {
@<Complete paragraph or code@>;
current_passage = NULL;
}
@<Complete paragraph or code@> =
if (current_paragraph) @<Complete paragraph@>
if (current_code) @<Complete code@>
@ Line breaks are treated as spaces in the content of a paragraph, so that
|P->content| here can be a long text but one which contains no line breaks.
@<Begin paragraph@> =
@<Complete paragraph or code@>;
@<Begin passage if not already in one@>;
current_paragraph = DocumentationTree::new_paragraph(cd->tree, NULL);
Trees::make_child(current_paragraph, current_passage);
@<Insert space in paragraph@> =
cdoc_paragraph *P = RETRIEVE_POINTER_cdoc_paragraph(current_paragraph->content);
if (Str::len(P->content) > 0) WRITE_TO(P->content, " ");
@<Insert line in paragraph@> =
cdoc_paragraph *P = RETRIEVE_POINTER_cdoc_paragraph(current_paragraph->content);
WRITE_TO(P->content, "%S", line);
@<Complete paragraph@> =
if (current_paragraph) {
current_paragraph = NULL;
}
@ Line breaks are more significant in code samples, of course. Blank lines
at the end of a code sample are stripped out; and they cannot appear at the start
of a code sample either, since a non-blank indented line is needed to trigger one.
@<Begin code@> =
@<Complete paragraph or code@>;
@<Begin passage if not already in one@>;
int paste_me = FALSE, continue_me = FALSE;
if ((Str::get_at(line, 0) == '*') &&
(Str::get_at(line, 1) == ':')) {
Str::delete_first_character(line);
Str::delete_first_character(line);
Str::trim_white_space(line);
paste_me = TRUE;
} else if ((Str::get_at(line, 0) == '*') &&
(Str::get_at(line, 1) == '*') &&
(Str::get_at(line, 2) == ':')) {
Str::delete_first_character(line);
Str::delete_first_character(line);
Str::delete_first_character(line);
Str::trim_white_space(line);
continue_me = TRUE;
} else if ((Str::get_at(line, 0) == '{') && (Str::get_at(line, 1) == '*') &&
(Str::get_at(line, 2) == '}')) {
Str::delete_first_character(line);
Str::delete_first_character(line);
Str::delete_first_character(line);
Str::trim_white_space(line);
paste_me = TRUE;
} else if ((Str::get_at(line, 0) == '{') && (Str::get_at(line, 1) == '*') &&
(Str::get_at(line, 2) == '*') && (Str::get_at(line, 3) == '}')) {
Str::delete_first_character(line);
Str::delete_first_character(line);
Str::delete_first_character(line);
Str::delete_first_character(line);
Str::trim_white_space(line);
continue_me = TRUE;
}
current_code = DocumentationTree::new_code_sample(cd->tree, paste_me, language);
if (continue_me) {
if (last_paste_code) {
cdoc_code_sample *S = RETRIEVE_POINTER_cdoc_code_sample(last_paste_code->content);
S->continuation = current_code;
} else {
tree_node *E = DocumentationTree::new_source_error(cd->tree, I"cannot continue a paste here");
Trees::make_child(E, current_passage);
}
}
if ((paste_me) || (continue_me)) {
last_paste_code = current_code;
} else {
last_paste_code = NULL;
}
Trees::make_child(current_code, current_passage);
pending_code_sample_blanks = 0;
code_is_tabular = FALSE;
@<Insert line break in code@> =
if (current_code->child) {
pending_code_sample_blanks++;
code_is_tabular = FALSE;
}
@<Insert line in code sample@> =
for (int i=0; i<pending_code_sample_blanks; i++)
Trees::make_child(DocumentationTree::new_code_line(cd->tree, NULL, 0, FALSE), current_code);
pending_code_sample_blanks = 0;
match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, line, L"Table %c*")) {
code_is_tabular = TRUE;
}
Regexp::dispose_of(&mr);
Trees::make_child(DocumentationTree::new_code_line(cd->tree, line, indentation-1, code_is_tabular),
current_code);
@<Complete code@> =
if (current_code) {
current_code = NULL;
code_is_tabular = FALSE;
}
@
=

View file

@ -2,50 +2,6 @@
To render a passage of extension documentation as HTML.
@h Textual renderer.
This very cheap renderer can be used to debug trees for logging purposes:
=
void DocumentationRenderer::as_plain_text(text_stream *OUT, heterogeneous_tree *T) {
WRITE("%S\n", T->type->name);
WRITE("--------\n");
INDENT;
Trees::traverse_from(T->root, &DocumentationRenderer::textual_visit, (void *) DL, 0);
OUTDENT;
WRITE("--------\n");
}
int DocumentationRenderer::textual_visit(tree_node *N, void *state, int L) {
text_stream *OUT = (text_stream *) state;
for (int i=0; i<L; i++) WRITE(" ");
if (N->type == heading_TNT) {
cdoc_heading *H = RETRIEVE_POINTER_cdoc_heading(N->content);
WRITE("Heading H%d level %d: '%S - %S'\n", H->ID, H->level, H->count, H->name);
} else if (N->type == example_TNT) {
cdoc_example *E = RETRIEVE_POINTER_cdoc_example(N->content);
WRITE("Example %c: '%S' (%d star(s))\n", E->letter, E->name, E->star_count);
} else if (N->type == phrase_defn_TNT) {
cdoc_phrase_defn *E = RETRIEVE_POINTER_cdoc_phrase_defn(N->content);
WRITE("Phrase definition (tag '%S') [ %S ]\n", E->tag, E->prototype);
} else if (N->type == passage_TNT) {
WRITE("Passage\n");
} else if (N->type == paragraph_TNT) {
cdoc_paragraph *E = RETRIEVE_POINTER_cdoc_paragraph(N->content);
WRITE("Paragraph: %d chars\n", Str::len(E->content));
for (int i=0; i<L+1; i++) { INDENT; }
WRITE("%S\n", E->content);
for (int i=0; i<L+1; i++) { OUTDENT; }
} else if (N->type == code_sample_TNT) {
WRITE("Code sample\n");
} else if (N->type == code_line_TNT) {
cdoc_code_line *E = RETRIEVE_POINTER_cdoc_code_line(N->content);
WRITE("Code line: ");
for (int i=0; i<E->indentation; i++) WRITE(" ");
WRITE("%S\n", E->content);
} else WRITE("Unknown node\n");
return TRUE;
}
@h Website renderer.
We will make several HTML files, but only one at a time:
@ -121,17 +77,16 @@ void DocumentationRenderer::render_index_page(OUTPUT_STREAM, compiled_documentat
HTML_OPEN("em");
DocumentationRenderer::render_text(OUT, I"Click on Chapter, Section or Example numbers to read");
HTML_CLOSE("em");
if (cd->tree->root->child->type == passage_TNT) {
markdown_item *md = cd->alt_tree->down;
if ((md) && ((md->type != HEADING_MIT) || (Markdown::get_heading_level(md) > 1))) {
HTML_TAG("hr");
HTML_OPEN_WITH("p", "class=\"extensionsubheading\"");
WRITE("introduction");
HTML_CLOSE("p");
for (tree_node *C = cd->tree->root->child; C; C = C->next) {
if (C->type == heading_TNT) {
cdoc_heading *E = RETRIEVE_POINTER_cdoc_heading(C->content);
if (E->level == 1) break;
}
DocumentationRenderer::render_body(OUT, cd, C);
for (markdown_item *md = cd->alt_tree->down; md; md = md->next) {
if ((md->type == HEADING_MIT) && (Markdown::get_heading_level(md) == 1))
break;
Markdown::render_extended(OUT, md, DocumentationInMarkdown::extension_flavoured_Markdown());
}
}
} else { /* there are only sections and examples, or not even that */
@ -143,7 +98,10 @@ void DocumentationRenderer::render_index_page(OUTPUT_STREAM, compiled_documentat
DocumentationRenderer::render_text(OUT, I"None is provided.");
HTML_CLOSE("p");
} else {
DocumentationRenderer::render_body(OUT, cd, cd->tree->root);
HTML_OPEN_WITH("div", "class=\"markdowncontent\"");
Markdown::render_extended(OUT, cd->alt_tree,
DocumentationInMarkdown::extension_flavoured_Markdown());
HTML_CLOSE("div");
}
}
WRITE("%S", extras);
@ -276,53 +234,35 @@ void DocumentationRenderer::render_toc(OUTPUT_STREAM, compiled_documentation *cd
WRITE("contents");
HTML_CLOSE("p");
HTML_OPEN_WITH("ul", "class=\"extensioncontents\"");
Trees::traverse_from(cd->tree->root, &DocumentationRenderer::toc_visitor, (void *) OUT, 0);
DocumentationRenderer::render_toc_r(OUT, cd->alt_tree, 0);
HTML_CLOSE("ul");
HTML_CLOSE("div");
}
void DocumentationRenderer::link_to(OUTPUT_STREAM, cdoc_heading *H) {
TEMPORARY_TEXT(ch)
if (H->level == 1) {
WRITE_TO(ch, "chapter%S.html", H->count);
} else if (H->level == 2) {
for (int i=0; i<Str::len(H->count); i++) {
wchar_t c = Str::get_at(H->count, i);
if (c == '.') {
WRITE_TO(ch, "chapter");
for (int j=0; j<i; j++)
PUT_TO(ch, Str::get_at(H->count, j));
WRITE_TO(ch, ".html");
break;
}
}
WRITE_TO(ch, "#section%d", H->ID);
}
void DocumentationRenderer::link_to(OUTPUT_STREAM, markdown_item *md) {
if (md->type != HEADING_MIT) internal_error("not a heading");
text_stream *ch = RETRIEVE_POINTER_text_stream(md->user_state);
HTML_OPEN_WITH("a", "style=\"text-decoration: none\" href=%S", ch);
DISCARD_TEXT(ch)
}
int DocumentationRenderer::toc_visitor(tree_node *N, void *state, int L) {
text_stream *OUT = (text_stream *) state;
if (N->type == heading_TNT) {
cdoc_heading *H = RETRIEVE_POINTER_cdoc_heading(N->content);
void DocumentationRenderer::render_toc_r(OUTPUT_STREAM, markdown_item *md, int L) {
if (md->type == HEADING_MIT) {
if (L > 0) {
HTML_OPEN_WITH("li", "class=\"exco%d\"", L);
HTML::begin_span(OUT, I"indexblack");
HTML_OPEN("b");
DocumentationRenderer::link_to(OUT, H);
if (H->level == 1) WRITE("Chapter %S: ", H->count);
else WRITE("Section %S: ", H->count);
DocumentationRenderer::link_to(OUT, md);
Markdown::render_extended(OUT, md->down,
DocumentationInMarkdown::extension_flavoured_Markdown());
HTML_CLOSE("a");
HTML_CLOSE("b");
HTML::end_span(OUT);
DocumentationRenderer::render_text(OUT, H->name);
HTML_CLOSE("li");
}
}
if (N->type == example_TNT) {
if (md->type == INFORM_EXAMPLE_HEADING_MIT) {
HTML_OPEN_WITH("li", "class=\"exco%d\"", L);
cdoc_example *E = RETRIEVE_POINTER_cdoc_example(N->content);
cdoc_example *E = RETRIEVE_POINTER_cdoc_example(md->user_state);
TEMPORARY_TEXT(link)
WRITE_TO(link, "style=\"text-decoration: none\" href=\"eg%d.html#eg%d\"",
E->number, E->number);
@ -335,26 +275,21 @@ int DocumentationRenderer::toc_visitor(tree_node *N, void *state, int L) {
DISCARD_TEXT(link)
HTML_CLOSE("li");
}
return TRUE;
}
void DocumentationRenderer::render_body(OUTPUT_STREAM, compiled_documentation *cd,
tree_node *from) {
HTML_OPEN_WITH("div", "class=\"documentation\"");
Trees::traverse_from(from, &DocumentationRenderer::body_visitor, (void *) OUT, 0);
HTML_CLOSE("div");
for (markdown_item *ch = md->down; ch; ch = ch->next)
DocumentationRenderer::render_toc_r(OUT, ch, L+1);
}
void DocumentationRenderer::render_example(OUTPUT_STREAM, compiled_documentation *cd, int eg) {
HTML_OPEN("div");
tree_node *EN = DocumentationTree::find_example(cd->tree, eg);
if (EN == NULL) {
markdown_item *alt_EN = DocumentationInMarkdown::find_example(cd->alt_tree, eg);
if (alt_EN == NULL) {
WRITE("Example %d is missing", eg);
} else {
DocumentationRenderer::render_example_heading(OUT, EN, EN->child);
cdoc_example *E = RETRIEVE_POINTER_cdoc_example(alt_EN->user_state);
DocumentationInMarkdown::render_example_heading(OUT, E, alt_EN->down);
HTML_CLOSE("div");
@<Enter the small print@>;
WRITE("This example is drawn from ");
/* WRITE("This example is drawn from ");
tree_node *H = EN->parent;
if (H->type == heading_TNT) {
cdoc_heading *E = RETRIEVE_POINTER_cdoc_heading(H->content);
@ -372,286 +307,31 @@ void DocumentationRenderer::render_example(OUTPUT_STREAM, compiled_documentation
HTML_CLOSE("a");
}
}
*/
@<Exit the small print@>;
}
}
void DocumentationRenderer::render_chapter(OUTPUT_STREAM, compiled_documentation *cd, int ch) {
HTML_OPEN("div");
tree_node *CN = DocumentationTree::find_chapter(cd->tree, ch);
if (CN == NULL) {
WRITE("Chapter %d is missing", ch);
} else {
DocumentationRenderer::render_body(OUT, cd, CN);
int found = FALSE;
TEMPORARY_TEXT(wanted)
WRITE_TO(wanted, "Chapter %d:", ch);
markdown_item *md = cd->alt_tree->down;
int rendering = FALSE;
while (md) {
if ((md->type == HEADING_MIT) && (Markdown::get_heading_level(md) == 1)) {
text_stream *S = md->stashed;
if (Str::begins_with(S, wanted)) { rendering = TRUE; found = TRUE; }
else rendering = FALSE;
}
if (rendering) Markdown::render_extended(OUT, md, DocumentationInMarkdown::extension_flavoured_Markdown());
md = md->next;
}
if (found == FALSE) WRITE("Chapter %d is missing", ch);
HTML_CLOSE("div");
}
int DocumentationRenderer::body_visitor(tree_node *N, void *state, int L) {
text_stream *OUT = (text_stream *) state;
if (N == NULL) return FALSE;
if (N->type == heading_TNT) {
cdoc_heading *H = RETRIEVE_POINTER_cdoc_heading(N->content);
if (H->level > 0) @<Typeset the heading of this chapter or section@>;
}
if (N->type == example_TNT) {
DocumentationRenderer::render_example_heading(OUT, N, NULL);
return FALSE;
}
if (N->type == source_error_TNT) {
cdoc_source_error *E = RETRIEVE_POINTER_cdoc_source_error(N->content);
HTML_OPEN_WITH("p", "class=\"documentationerrorbox\"");
HTML::begin_span(OUT, I"documentationerror");
WRITE("Error: "); DocumentationRenderer::render_text(OUT, E->error_message);
HTML_CLOSE("span");
HTML_CLOSE("p");
return TRUE;
}
if (N->type == phrase_defn_TNT) {
HTML_OPEN_WITH("div", "class=\"definition\"");
HTML_OPEN_WITH("p", "class=\"defnprototype\"");
cdoc_phrase_defn *P = RETRIEVE_POINTER_cdoc_phrase_defn(N->content);
HTML_OPEN("b");
int bl = 0;
for (int i=0; i<Str::len(P->prototype); i++) {
wchar_t c = Str::get_at(P->prototype, i);
if (c == '(') { bl++; if (bl == 1) HTML_CLOSE("b"); }
PUT(c);
if (c == ')') { bl--; if (bl == 0) HTML_OPEN("b"); }
}
if (bl <= 0) HTML_CLOSE("b");
HTML_CLOSE("p");
Trees::traverse_from(N->child, &DocumentationRenderer::body_visitor, state, L);
HTML_CLOSE("div");
return FALSE;
}
if (N->type == paragraph_TNT) {
cdoc_paragraph *P = RETRIEVE_POINTER_cdoc_paragraph(N->content);
HTML_OPEN("p");
DocumentationRenderer::render_text(OUT, P->content);
HTML_CLOSE("p");
}
if (N->type == code_sample_TNT) {
cdoc_code_sample *S = RETRIEVE_POINTER_cdoc_code_sample(N->content);
HTML_OPEN("blockquote");
if (S->with_paste_marker) @<Render the paste icon@>;
@<Render the body of the code sample@>;
HTML_CLOSE("blockquote");
return FALSE;
}
return TRUE;
}
@<Typeset the heading of this chapter or section@> =
HTML_TAG("hr");
if (H->level == 1) {
HTML_OPEN("h2");
HTML::begin_span(OUT, I"indexdullred");
}
if (H->level == 2) {
HTML_OPEN("h3");
HTML_OPEN("span");
}
HTML_OPEN_WITH("span", "id=docsec%d", H->ID);
if (H->level == 1) WRITE("Chapter %S: ", H->count);
else WRITE("Section %S: ", H->count);
DocumentationRenderer::render_text(OUT, H->name);
HTML_CLOSE("span");
HTML_CLOSE("span");
if (H->level == 1) HTML_CLOSE("h2");
if (H->level == 2) HTML_CLOSE("h3");
@<Render the paste icon@> =
TEMPORARY_TEXT(matter)
for (tree_node *M = N; M; ) {
if (M->type == code_sample_TNT) {
cdoc_code_sample *S = RETRIEVE_POINTER_cdoc_code_sample(M->content);
for (tree_node *C = M->child; C; C = C->next) {
cdoc_code_line *L = RETRIEVE_POINTER_cdoc_code_line(C->content);
for (int i=0; i<L->indentation; i++) WRITE_TO(matter, "\t");
DocumentationRenderer::render_text(matter, L->content);
if (C->next) WRITE_TO(matter, "\n");
}
M = S->continuation;
if (M) WRITE_TO(matter, "\n\n");
} else break;
}
ExtensionWebsite::paste_button(OUT, matter);
DISCARD_TEXT(matter)
@<Render the body of the code sample@> =
programming_language *pl = S->language;
if (pl) {
Painter::reset_syntax_colouring(pl);
for (tree_node *C = N->child; C; C = C->next) {
cdoc_code_line *L = RETRIEVE_POINTER_cdoc_code_line(C->content);
Painter::syntax_colour(pl, NULL, L->content, L->colouring, FALSE);
}
if (Str::eq(pl->language_name, I"Inform")) {
int ts = FALSE;
for (tree_node *C = N->child; C; C = C->next) {
cdoc_code_line *L = RETRIEVE_POINTER_cdoc_code_line(C->content);
for (int i=0; i<Str::len(L->colouring); i++) {
if (Str::get_at(L->colouring, i) == STRING_COLOUR) {
wchar_t c = Str::get_at(L->content, i);
if (c == '[') ts = TRUE;
if (ts) Str::put_at(L->colouring, i, EXTRACT_COLOUR);
if (c == ']') ts = FALSE;
} else ts = FALSE;
}
}
}
}
HTML::begin_span(OUT, I"indexdullblue");
int tabulating = FALSE;
for (tree_node *C = N->child; C; C = C->next) {
cdoc_code_line *L = RETRIEVE_POINTER_cdoc_code_line(C->content);
if (L->tabular) {
if (tabulating) {
@<Begin new row of I7 table in extension documentation@>;
} else {
@<Begin I7 table in extension documentation@>;
tabulating = TRUE;
}
int cell_from = 0, cell_to = 0, i = 0;
@<Begin table cell for I7 table in extension documentation@>;
for (; i<Str::len(L->content); i++) {
if (Str::get_at(L->content, i) == '\t') {
@<End table cell for I7 table in extension documentation@>;
while (Str::get_at(L->content, i) == '\t') i++;
@<Begin table cell for I7 table in extension documentation@>;
i--;
} else {
cell_to++;
}
}
@<End table cell for I7 table in extension documentation@>;
@<End row of I7 table in extension documentation@>;
} else {
if (tabulating) {
@<End I7 table in extension documentation@>;
tabulating = FALSE;
}
for (int i=0; i<L->indentation; i++) WRITE("&nbsp;&nbsp;&nbsp;&nbsp;");
DocumentationRenderer::syntax_coloured_code(OUT, L->content, L->colouring,
0, Str::len(L->content));
if ((C->next) && (RETRIEVE_POINTER_cdoc_code_line(C->next->content)->tabular == FALSE)) HTML_TAG("br");
}
WRITE("\n");
}
if (tabulating) @<End I7 table in extension documentation@>;
HTML_CLOSE("span");
@ Unsurprisingly, I7 tables are set (after their titling lines) as HTML tables,
and this is fiddly but elementary in the usual way of HTML tables:
@<Begin I7 table in extension documentation@> =
HTML::end_span(OUT);
HTML_TAG("br");
HTML::begin_plain_html_table(OUT);
HTML::first_html_column(OUT, 0);
@<End table cell for I7 table in extension documentation@> =
DocumentationRenderer::syntax_coloured_code(OUT, L->content, L->colouring,
cell_from, cell_to);
HTML::end_span(OUT);
HTML::next_html_column(OUT, 0);
@<Begin table cell for I7 table in extension documentation@> =
cell_from = i; cell_to = cell_from;
HTML::begin_span(OUT, I"indexdullblue");
@<Begin new row of I7 table in extension documentation@> =
HTML::first_html_column(OUT, 0);
@<End row of I7 table in extension documentation@> =
HTML::end_html_row(OUT);
@<End I7 table in extension documentation@> =
HTML::end_html_table(OUT);
HTML::begin_span(OUT, I"indexdullblue");
@ An example is set with a two-table header, and followed optionally by a
table of its inset copy, shaded to distinguish it from the rest of the
page. The heading is constructed with a main table of one row of two cells,
in the following section. The left-hand cell then contains a further table,
in the next section.
=
void DocumentationRenderer::render_example_heading(OUTPUT_STREAM, tree_node *EN,
tree_node *passage_node) {
cdoc_example *E = RETRIEVE_POINTER_cdoc_example(EN->content);
TEMPORARY_TEXT(link)
WRITE_TO(link, "style=\"text-decoration: none\" href=\"eg%d.html\"", E->number);
HTML_TAG("hr"); /* rule a line before the example heading */
HTML::begin_plain_html_table(OUT);
HTML_OPEN("tr");
/* Left hand cell: the oval icon */
HTML_OPEN_WITH("td", "halign=\"left\" valign=\"top\" cellpadding=0 cellspacing=0 width=38px");
HTML_OPEN_WITH("span", "id=eg%d", E->number); /* provide the anchor point */
@<Typeset the lettered oval example icon@>;
HTML_CLOSE("span"); /* end the textual link */
HTML_CLOSE("td");
/* Right hand cell: the asterisks and title, with rubric underneath */
HTML_OPEN_WITH("td", "cellpadding=0 cellspacing=0 halign=\"left\" valign=\"top\"");
if (passage_node == NULL) HTML_OPEN_WITH("a", "%S", link);
for (int asterisk = 0; asterisk < E->star_count; asterisk++)
PUT(0x2605); /* the Unicode for "black star" emoji */
/* or 0x2B50 is the Unicode for "star" emoji */
/* or again, could use the asterisk.png image in the app */
WRITE("&nbsp; ");
HTML_OPEN("b");
HTML::begin_span(OUT, I"indexdarkgrey");
WRITE("&nbsp;Example&nbsp;");
HTML::end_span(OUT);
HTML::begin_span(OUT, I"indexblack");
DocumentationRenderer::render_text(OUT, E->name);
HTML_TAG("br");
DocumentationRenderer::render_text(OUT, E->description);
HTML::end_span(OUT);
HTML_CLOSE("b");
if (passage_node == NULL) HTML_CLOSE("a"); /* Link does not cover body, only heading */
if (passage_node)
Trees::traverse_from(passage_node, &DocumentationRenderer::body_visitor, (void *) OUT, 0);
HTML_CLOSE("td");
HTML_CLOSE("tr");
HTML::end_html_table(OUT);
DISCARD_TEXT(link)
}
@ The little oval icon with its superimposed boldface letter is much harder to
get right on all browsers than it looks, and the following is the result of
some pretty grim experimentation. Basically, we make a tight, borderless,
one-cell-in-one-row table, use CSS to make a transparent PNG image of an oval
the background image for the table, then put a boldface letter in the centre
of its one and only cell. (Things were even worse when IE6 for Windows still
had its infamous PNG transparency bug.)
@<Typeset the lettered oval example icon@> =
HTML::begin_plain_html_table(OUT);
HTML_OPEN_WITH("tr", "class=\"oval\"");
HTML_OPEN_WITH("td", "width=38px height=30px align=\"left\" valign=\"center\"");
if (passage_node == NULL) HTML_OPEN_WITH("a", "%S", link);
HTML_OPEN_WITH("div",
"class=\"paragraph Body\" style=\"line-height: 1px; margin-bottom: 0px; "
"margin-top: 0px; padding-bottom: 0pt; padding-top: 0px; text-align: center;\"");
HTML::begin_span(OUT, I"extensionexampleletter");
PUT(E->letter);
HTML::end_span(OUT);
HTML_CLOSE("div");
if (passage_node == NULL) HTML_CLOSE("a");
HTML_CLOSE("td");
HTML_CLOSE("tr");
HTML::end_html_table(OUT);
@
=
@ -661,34 +341,3 @@ void DocumentationRenderer::render_text(OUTPUT_STREAM, text_stream *text) {
Markdown::render(OUT, md);
HTML_CLOSE("span");
}
@ =
void DocumentationRenderer::syntax_coloured_code(OUTPUT_STREAM, text_stream *text,
text_stream *colouring, int from, int to) {
wchar_t current_col = 0;
for (int i=from; i<to; i++) {
wchar_t c = Str::get_at(text, i);
wchar_t col = Str::get_at(colouring, i);
if (col != current_col) {
if (current_col) HTML_CLOSE("span");
text_stream *span_class = NULL;
switch (col) {
case DEFINITION_COLOUR: span_class = I"syntaxdefinition"; break;
case FUNCTION_COLOUR: span_class = I"syntaxfunction"; break;
case RESERVED_COLOUR: span_class = I"syntaxreserved"; break;
case ELEMENT_COLOUR: span_class = I"syntaxelement"; break;
case IDENTIFIER_COLOUR: span_class = I"syntaxidentifier"; break;
case CHARACTER_COLOUR: span_class = I"syntaxcharacter"; break;
case CONSTANT_COLOUR: span_class = I"syntaxconstant"; break;
case STRING_COLOUR: span_class = I"syntaxstring"; break;
case PLAIN_COLOUR: span_class = I"syntaxplain"; break;
case EXTRACT_COLOUR: span_class = I"syntaxextract"; break;
case COMMENT_COLOUR: span_class = I"syntaxcomment"; break;
}
HTML_OPEN_WITH("span", "class=\"%S\"", span_class);
current_col = col;
}
PUT(c);
}
if (current_col) HTML_CLOSE("span");
}

View file

@ -1,356 +0,0 @@
[DocumentationTree::] Documentation Tree.
A data structure to hold segments of Inform resource documentation.
@h The tree itself.
We will store the content in a heterogeneous tree: see //foundation: Trees//.
=
tree_type *cdoc_tree_TT = NULL; /* The only tree type we use in this section */
tree_node_type
*heading_TNT = NULL,
*example_TNT = NULL,
*passage_TNT = NULL,
*phrase_defn_TNT = NULL,
*paragraph_TNT = NULL,
*code_sample_TNT = NULL,
*code_line_TNT = NULL,
*source_error_TNT = NULL;
heterogeneous_tree *DocumentationTree::new(void) {
if (cdoc_tree_TT == NULL) {
cdoc_tree_TT = Trees::new_type(I"documentation tree",
&DocumentationTree::verify_root);
heading_TNT = Trees::new_node_type(I"heading", cdoc_heading_CLASS,
&DocumentationTree::heading_verifier);
example_TNT = Trees::new_node_type(I"example", cdoc_example_CLASS,
&DocumentationTree::example_verifier);
passage_TNT = Trees::new_node_type(I"passage", cdoc_passage_CLASS,
&DocumentationTree::passage_verifier);
phrase_defn_TNT = Trees::new_node_type(I"phrase defn", cdoc_phrase_defn_CLASS,
&DocumentationTree::phrase_defn_verifier);
paragraph_TNT = Trees::new_node_type(I"paragraph", cdoc_paragraph_CLASS,
&DocumentationTree::paragraph_verifier);
code_sample_TNT = Trees::new_node_type(I"code sample", cdoc_code_sample_CLASS,
&DocumentationTree::code_sample_verifier);
code_line_TNT = Trees::new_node_type(I"line", cdoc_code_line_CLASS,
&DocumentationTree::code_line_verifier);
source_error_TNT = Trees::new_node_type(I"error", cdoc_source_error_CLASS,
&DocumentationTree::source_error_verifier);
}
heterogeneous_tree *tree = Trees::new(cdoc_tree_TT);
Trees::make_root(tree, DocumentationTree::new_heading(tree, I"(root)", NULL, 0, 0, 0, 0));
return tree;
}
@ The root of the tree is required to be a heading node.
=
int DocumentationTree::verify_root(tree_node *N) {
if ((N == NULL) || (N->type != heading_TNT) || (N->next))
return FALSE;
return TRUE;
}
@ Heading nodes are used for the root (which has ID 0 and level 0) and then for
all chapter and section headings (which have levels 1 and 2 respectively). All
ID numbers are unique. The root heading is the only one with an empty "count",
which is otherwise something like |5| (chapter 5) or |3.4| (section 4 in chapter 3).
=
typedef struct cdoc_heading {
struct text_stream *count;
struct text_stream *name;
struct text_stream *recognition_name;
int level; /* 0 = root, 1 = chapter, 2 = section */
int ID;
CLASS_DEFINITION
} cdoc_heading;
tree_node *DocumentationTree::new_heading(heterogeneous_tree *tree,
text_stream *title, text_stream *recognise_as, int level, int ID, int cc, int sc) {
cdoc_heading *H = CREATE(cdoc_heading);
H->count = Str::new();
if (cc > 0) WRITE_TO(H->count, "%d", cc);
if ((cc > 0) && (sc > 0)) WRITE_TO(H->count, ".");
if (sc > 0) WRITE_TO(H->count, "%d", sc);
H->name = Str::duplicate(title);
H->recognition_name = Str::duplicate(recognise_as);
H->level = level;
H->ID = ID;
return Trees::new_node(tree, heading_TNT, STORE_POINTER_cdoc_heading(H));
}
@ A heading node can only have headings or examples as children, except that
it can have a single passage node as its first child. If so, this is introductory
text.
=
int DocumentationTree::heading_verifier(tree_node *N) {
for (tree_node *C = N->child; C; C = C->next) {
if ((C->type != heading_TNT) && (C->type != example_TNT) && (C->type != passage_TNT))
return FALSE;
if ((C->type == passage_TNT) && (C->next)) return FALSE;
}
return TRUE;
}
@ Example nodes are used for the lettered examples in a documentation segment.
They have a "difficulty rating" in stars, 0 to 4. Numbers are unique from 1, 2, ...;
letters are unique from A, B, C, ...
=
typedef struct cdoc_example {
struct text_stream *name;
struct text_stream *description;
int star_count;
int number;
char letter;
CLASS_DEFINITION
} cdoc_example;
tree_node *DocumentationTree::new_example(heterogeneous_tree *tree,
text_stream *title, text_stream *desc, int star_count, int ecount) {
cdoc_example *E = CREATE(cdoc_example);
E->name = Str::duplicate(title);
E->description = Str::duplicate(desc);
E->star_count = star_count;
E->number = ecount;
E->letter = 'A' + (char) ecount - 1;
return Trees::new_node(tree, example_TNT, STORE_POINTER_cdoc_example(E));
}
@ An example node always has a single child: the passage containing its content.
=
int DocumentationTree::example_verifier(tree_node *N) {
if ((N->child == NULL) || (N->child->type != passage_TNT) || (N->child->next))
return FALSE;
return TRUE;
}
@ Passage nodes contain passages of documentation which fall under examples
or headings.
=
typedef struct cdoc_passage {
CLASS_DEFINITION
} cdoc_passage;
tree_node *DocumentationTree::new_passage(heterogeneous_tree *tree) {
cdoc_passage *P = CREATE(cdoc_passage);
return Trees::new_node(tree, passage_TNT, STORE_POINTER_cdoc_passage(P));
}
@ A passage node is essentially a holder for a mixed list of paragraphs,
indented code samples and phrase definitions.
=
int DocumentationTree::passage_verifier(tree_node *N) {
for (tree_node *C = N->child; C; C = C->next)
if ((C->type != paragraph_TNT) &&
(C->type != code_sample_TNT) &&
(C->type != phrase_defn_TNT) &&
(C->type != source_error_TNT))
return FALSE;
return TRUE;
}
@ Phrase definition nodes contain little dashed inset boxes formally describing
phrases. The "tag" is optional and is for potential cross-referencing; the
"prototype" is the Inform source text for the phrase definition.
=
typedef struct cdoc_phrase_defn {
struct text_stream *tag;
struct text_stream *prototype;
CLASS_DEFINITION
} cdoc_phrase_defn;
tree_node *DocumentationTree::new_phrase_defn(heterogeneous_tree *tree,
text_stream *tag, text_stream *prototype) {
cdoc_phrase_defn *P = CREATE(cdoc_phrase_defn);
P->tag = Str::duplicate(tag);
P->prototype = Str::duplicate(prototype);
return Trees::new_node(tree, phrase_defn_TNT, STORE_POINTER_cdoc_phrase_defn(P));
}
@ An phrase defn node always has a single child: the passage containing its content.
=
int DocumentationTree::phrase_defn_verifier(tree_node *N) {
if ((N->child == NULL) || (N->child->type != passage_TNT) || (N->child->next))
return FALSE;
return TRUE;
}
@ A paragraph node holds a body paragraph of text. It has no children.
=
typedef struct cdoc_paragraph {
struct text_stream *content;
CLASS_DEFINITION
} cdoc_paragraph;
tree_node *DocumentationTree::new_paragraph(heterogeneous_tree *tree,
text_stream *content) {
cdoc_paragraph *P = CREATE(cdoc_paragraph);
P->content = Str::duplicate(content);
return Trees::new_node(tree, paragraph_TNT, STORE_POINTER_cdoc_paragraph(P));
}
int DocumentationTree::paragraph_verifier(tree_node *N) {
if (N->child) return FALSE; /* This must be a leaf node */
return TRUE;
}
@ A code sample node holds a single code sample.
=
typedef struct cdoc_code_sample {
CLASS_DEFINITION
int with_paste_marker;
struct tree_node *continuation;
struct programming_language *language;
} cdoc_code_sample;
tree_node *DocumentationTree::new_code_sample(heterogeneous_tree *tree, int paste_me,
programming_language *language) {
cdoc_code_sample *C = CREATE(cdoc_code_sample);
C->with_paste_marker = paste_me;
C->continuation = NULL;
C->language = language;
return Trees::new_node(tree, code_sample_TNT, STORE_POINTER_cdoc_code_sample(C));
}
@ A code sample's children form a list of code lines.
=
int DocumentationTree::code_sample_verifier(tree_node *N) {
for (tree_node *C = N->child; C; C = C->next)
if (C->type != code_line_TNT)
return FALSE;
if (N->child == NULL) return FALSE;
return TRUE;
}
@ A code line node holds a single line of code, and has no children. The
indentation is relative to the start of the code sample, so usually starts
at 0, and is measured in tab stops.
=
typedef struct cdoc_code_line {
struct text_stream *content;
struct text_stream *colouring;
int indentation;
int tabular;
CLASS_DEFINITION
} cdoc_code_line;
tree_node *DocumentationTree::new_code_line(heterogeneous_tree *tree,
text_stream *content, int indentation, int tabular) {
cdoc_code_line *C = CREATE(cdoc_code_line);
C->content = Str::duplicate(content);
C->colouring = Str::new();
C->indentation = indentation;
C->tabular = tabular;
return Trees::new_node(tree, code_line_TNT, STORE_POINTER_cdoc_code_line(C));
}
int DocumentationTree::code_line_verifier(tree_node *N) {
if (N->child) return FALSE; /* This must be a leaf node */
return TRUE;
}
@ An error node holds a single error message, and has no children.
=
typedef struct cdoc_source_error {
struct text_stream *error_message;
CLASS_DEFINITION
} cdoc_source_error;
tree_node *DocumentationTree::new_source_error(heterogeneous_tree *tree,
text_stream *content) {
cdoc_source_error *E = CREATE(cdoc_source_error);
E->error_message = Str::duplicate(content);
return Trees::new_node(tree, source_error_TNT, STORE_POINTER_cdoc_source_error(E));
}
int DocumentationTree::source_error_verifier(tree_node *N) {
if (N->child) return FALSE; /* This must be a leaf node */
return TRUE;
}
@ This utility function returns the |eg|th example node, if it exists, and |NULL|
if not.
=
tree_node *DocumentationTree::find_example(heterogeneous_tree *T, int eg) {
if (eg < 1) return NULL;
dc_find_example_task task;
task.to_find_example = eg;
task.to_find_heading = NULL;
task.to_find_section = NULL;
task.result = NULL;
Trees::traverse_from(T->root, &DocumentationTree::find_visit, (void *) &task, 0);
return task.result;
}
tree_node *DocumentationTree::find_chapter(heterogeneous_tree *T, int ch) {
if (ch < 1) return NULL;
dc_find_example_task task;
task.to_find_example = 0;
task.to_find_heading = Str::new(); WRITE_TO(task.to_find_heading, "%d", ch);
task.to_find_section = NULL;
task.result = NULL;
Trees::traverse_from(T->root, &DocumentationTree::find_visit, (void *) &task, 0);
return task.result;
}
tree_node *DocumentationTree::find_section(heterogeneous_tree *T, text_stream *name) {
if (Str::len(name) == 0) return NULL;
dc_find_example_task task;
task.to_find_example = 0;
task.to_find_heading = NULL;
task.to_find_section = name;
task.result = NULL;
Trees::traverse_from(T->root, &DocumentationTree::find_visit, (void *) &task, 0);
return task.result;
}
typedef struct dc_find_example_task {
int to_find_example;
struct text_stream *to_find_heading;
struct text_stream *to_find_section;
struct tree_node *result;
} dc_find_example_task;
int DocumentationTree::find_visit(tree_node *N, void *state, int L) {
dc_find_example_task *task = (dc_find_example_task *) state;
if (task->result) return FALSE;
if ((task->to_find_example > 0) && (N->type == example_TNT)) {
cdoc_example *E = RETRIEVE_POINTER_cdoc_example(N->content);
if (E->number == task->to_find_example) {
task->result = N;
return FALSE;
}
}
if ((task->to_find_heading) && (N->type == heading_TNT)) {
cdoc_heading *E = RETRIEVE_POINTER_cdoc_heading(N->content);
if ((E->level == 1) && (Str::eq(E->count, task->to_find_heading))) {
task->result = N;
return FALSE;
}
}
if ((task->to_find_section) && (N->type == heading_TNT)) {
cdoc_heading *E = RETRIEVE_POINTER_cdoc_heading(N->content);
if ((E->level == 2) && (Str::eq_insensitive(E->recognition_name, task->to_find_section))) {
task->result = N;
return FALSE;
}
}
return TRUE;
}

View file

@ -0,0 +1,616 @@
[DocumentationInMarkdown::] Documentation in Markdown.
To provide a variation on Markdown for extension documentation.
@ Plain CommonMark would not give us the bells and whistles we want, and would
also allow rather more HTML liberty than is a good idea here. So:
@e INFORM_HEADINGS_MARKDOWNFEATURE
@e PASTE_ICONS_MARKDOWNFEATURE
@e INFORM_EXAMPLE_HEADING_MIT
@e INFORM_ERROR_MARKER_MIT
=
markdown_variation *extension_flavoured_Markdown = NULL;
markdown_variation *DocumentationInMarkdown::extension_flavoured_Markdown(void) {
if (extension_flavoured_Markdown) return extension_flavoured_Markdown;
extension_flavoured_Markdown = MarkdownVariations::new(I"Inform-flavoured Markdown");
MarkdownVariations::remove_feature(extension_flavoured_Markdown, HTML_BLOCKS_MARKDOWNFEATURE);
MarkdownVariations::remove_feature(extension_flavoured_Markdown, INLINE_HTML_MARKDOWNFEATURE);
markdown_feature *Inform_headings = MarkdownVariations::new_feature(I"Inform_headings", INFORM_HEADINGS_MARKDOWNFEATURE);
METHOD_ADD(Inform_headings, POST_PHASE_I_MARKDOWN_MTID, DocumentationInMarkdown::Inform_headings_intervene_after_Phase_I);
MarkdownVariations::add_feature(extension_flavoured_Markdown, INFORM_HEADINGS_MARKDOWNFEATURE);
markdown_feature *paste_icons = MarkdownVariations::new_feature(I"paste icons", PASTE_ICONS_MARKDOWNFEATURE);
METHOD_ADD(paste_icons, RENDER_MARKDOWN_MTID, DocumentationInMarkdown::paste_icons_renderer);
METHOD_ADD(paste_icons, POST_PHASE_I_MARKDOWN_MTID, DocumentationInMarkdown::paste_icons_intervene_after_Phase_I);
MarkdownVariations::add_feature(extension_flavoured_Markdown, PASTE_ICONS_MARKDOWNFEATURE);
Markdown::new_container_block_type(INFORM_EXAMPLE_HEADING_MIT, I"INFORM_EXAMPLE_HEADING");
Markdown::new_leaf_block_type(INFORM_ERROR_MARKER_MIT, I"INFORM_ERROR_MARKER");
return extension_flavoured_Markdown;
}
@ Markdown paragraphs which take the following shapes are to be headings:
= (text)
Chapter: Survey and Prospecting
Section: Black Gold
Example: *** Gelignite Anderson - A Tale of the Texas Oilmen
=
where in each case the colon can equally be a hyphen, and with optional
space either side.
=
void DocumentationInMarkdown::Inform_headings_intervene_after_Phase_I(markdown_feature *feature,
markdown_item *tree, md_links_dictionary *link_references) {
int example_number = 0;
DocumentationInMarkdown::Inform_headings_r(tree, &example_number);
DocumentationInMarkdown::regroup_examples_r(tree, &example_number);
int section_number = 0, chapter_number = 0;
TEMPORARY_TEXT(latest)
DocumentationInMarkdown::number_headings_r(tree, &section_number, &chapter_number, latest);
DISCARD_TEXT(latest)
}
void DocumentationInMarkdown::Inform_headings_r(markdown_item *md, int *example_number) {
if (md->type == PARAGRAPH_MIT) {
text_stream *line = md->stashed;
match_results mr = Regexp::create_mr();
if ((Regexp::match(&mr, line, L"Section *: *(%c+?)")) ||
(Regexp::match(&mr, line, L"Section *- *(%c+?)"))) {
MDBlockParser::change_type(NULL, md, HEADING_MIT);
Markdown::set_heading_level(md, 2);
Str::clear(line);
WRITE_TO(line, "%S", mr.exp[0]);
} else if ((Regexp::match(&mr, line, L"Chapter *: *(%c+?)")) ||
(Regexp::match(&mr, line, L"Chapter *- *(%c+?)"))) {
MDBlockParser::change_type(NULL, md, HEADING_MIT);
Markdown::set_heading_level(md, 1);
Str::clear(line);
WRITE_TO(line, "%S", mr.exp[0]);
} else if ((Regexp::match(&mr, line, L"Example *: *(%**) *(%c+?)")) ||
(Regexp::match(&mr, line, L"Example *- *(%**) *(%c+?)"))) {
MDBlockParser::change_type(NULL, md, INFORM_EXAMPLE_HEADING_MIT);
int star_count = Str::len(mr.exp[0]);
cdoc_example *new_eg = DocumentationCompiler::new_example_alone(mr.exp[1], NULL,
star_count, ++(*example_number));
if (star_count == 0) {
markdown_item *E = DocumentationInMarkdown::error_item(
I"this example should be marked (before the title) '*', '**', '***' or '****' for difficulty");
E->next = md->next; md->next = E;
}
if (star_count > 4) {
markdown_item *E = DocumentationInMarkdown::error_item(
I"four stars '****' is the maximum difficulty rating allowed");
E->next = md->next; md->next = E;
}
md->user_state = STORE_POINTER_cdoc_example(new_eg);
}
Regexp::dispose_of(&mr);
}
for (markdown_item *ch = md->down; ch; ch=ch->next) {
DocumentationInMarkdown::Inform_headings_r(ch, example_number);
}
}
markdown_item *DocumentationInMarkdown::error_item(text_stream *text) {
markdown_item *E = Markdown::new_item(INFORM_ERROR_MARKER_MIT);
E->stashed = Str::duplicate(text);
return E;
}
@ =
void DocumentationInMarkdown::regroup_examples_r(markdown_item *md, int *example_number) {
if (md->type == INFORM_EXAMPLE_HEADING_MIT) {
if (md->down == NULL) {
markdown_item *run_from = md->next;
if (run_from) {
markdown_item *run_to = run_from, *prev = NULL;
while (run_to) {
if (run_to->type == INFORM_EXAMPLE_HEADING_MIT) break;
if ((run_to->type == HEADING_MIT) && (Markdown::get_heading_level(run_to) <= 2)) break;
prev = run_to;
run_to = run_to->next;
}
if (prev) {
md->down = run_from; md->next = run_to; prev->next = NULL;
}
}
}
}
for (markdown_item *ch = md->down; ch; ch=ch->next) {
DocumentationInMarkdown::regroup_examples_r(ch, example_number);
}
}
@ =
void DocumentationInMarkdown::number_headings_r(markdown_item *md,
int *section_number, int *chapter_number, text_stream *latest) {
if (md->type == HEADING_MIT) {
switch (Markdown::get_heading_level(md)) {
case 1: {
md->user_state = STORE_POINTER_text_stream(md->stashed);
(*chapter_number)++;
(*section_number) = 0;
Str::clear(latest);
WRITE_TO(latest, "Chapter %d: %S", *chapter_number, md->stashed);
md->stashed = Str::duplicate(latest);
text_stream *url = Str::new();
WRITE_TO(url, "chapter%d.html", *chapter_number);
md->user_state = STORE_POINTER_text_stream(url);
break;
}
case 2: {
md->user_state = STORE_POINTER_text_stream(md->stashed);
(*section_number)++;
Str::clear(latest);
WRITE_TO(latest, "Section ");
if (*chapter_number > 0) WRITE_TO(latest, "%d.", *chapter_number);
WRITE_TO(latest, "%d: %S", *section_number, md->stashed);
md->stashed = Str::duplicate(latest);
text_stream *url = Str::new();
if (*chapter_number > 0)
WRITE_TO(url, "chapter%d.html", *chapter_number);
WRITE_TO(url, "#section%d", *section_number);
md->user_state = STORE_POINTER_text_stream(url);
break;
}
}
}
for (markdown_item *ch = md->down; ch; ch=ch->next) {
DocumentationInMarkdown::number_headings_r(ch, section_number, chapter_number, latest);
}
}
void DocumentationInMarkdown::paste_icons_intervene_after_Phase_I(markdown_feature *feature,
markdown_item *tree, md_links_dictionary *link_references) {
DocumentationInMarkdown::paiapi_r(tree);
}
void DocumentationInMarkdown::paiapi_r(markdown_item *md) {
markdown_item *current_sample = NULL;
for (markdown_item *ch = md->down; ch; ch=ch->next) {
if ((ch->type == CODE_BLOCK_MIT) && (Str::prefix_eq(ch->stashed, I"{*}", 3))) {
ch->user_state = STORE_POINTER_markdown_item(ch);
current_sample = ch;
Str::delete_first_character(ch->stashed);
Str::delete_first_character(ch->stashed);
Str::delete_first_character(ch->stashed);
} else if ((ch->type == CODE_BLOCK_MIT) &&
(Str::prefix_eq(ch->stashed, I"{**}", 3)) && (current_sample)) {
ch->user_state = STORE_POINTER_markdown_item(current_sample);
Str::delete_first_character(ch->stashed);
Str::delete_first_character(ch->stashed);
Str::delete_first_character(ch->stashed);
Str::delete_first_character(ch->stashed);
}
DocumentationInMarkdown::paiapi_r(ch);
if (ch->type == CODE_BLOCK_MIT) {
TEMPORARY_TEXT(detabbed)
for (int i=0, margin=0; i<Str::len(ch->stashed); i++) {
wchar_t c = Str::get_at(ch->stashed, i);
if (c == '\t') {
PUT_TO(detabbed, ' '); margin++;
while (margin % 4 != 0) { PUT_TO(detabbed, ' '); margin++; }
} else {
PUT_TO(detabbed, c); margin++;
if (c == '\n') margin = 0;
}
}
Str::clear(ch->stashed);
WRITE_TO(ch->stashed, "%S", detabbed);
DISCARD_TEXT(detabbed);
}
}
}
int DocumentationInMarkdown::paste_icons_renderer(markdown_feature *feature, text_stream *OUT,
markdown_item *md, int mode) {
if (md->type == HEADING_MIT) {
int L = Markdown::get_heading_level(md);
switch (L) {
case 1: HTML_OPEN("h2"); break;
case 2: HTML_OPEN("h3"); break;
case 3: HTML_OPEN("h4"); break;
case 4: HTML_OPEN("h5"); break;
default: HTML_OPEN("h6"); break;
}
TEMPORARY_TEXT(anchor)
if (L <= 2) {
text_stream *url = RETRIEVE_POINTER_text_stream(md->user_state);
for (int i=0; i<Str::len(url); i++)
if (Str::get_at(url, i) == '#')
for (i++; i<Str::len(url); i++)
PUT_TO(anchor, Str::get_at(url, i));
}
if (Str::len(anchor) > 0) {
HTML_OPEN_WITH("span", "id=%S", anchor);
} else {
HTML_OPEN("span");
}
DISCARD_TEXT(anchor)
Markdown::render_extended(OUT, md->down, DocumentationInMarkdown::extension_flavoured_Markdown());
HTML_CLOSE("span");
switch (L) {
case 1: HTML_CLOSE("h2"); break;
case 2: HTML_CLOSE("h3"); break;
case 3: HTML_CLOSE("h4"); break;
case 4: HTML_CLOSE("h5"); break;
default: HTML_CLOSE("h6"); break;
}
return TRUE;
}
if (md->type == INFORM_EXAMPLE_HEADING_MIT) {
cdoc_example *E = RETRIEVE_POINTER_cdoc_example(md->user_state);
DocumentationInMarkdown::render_example_heading(OUT, E, NULL);
return TRUE;
}
if (md->type == CODE_BLOCK_MIT) {
DocumentationInMarkdown::render_code_block(OUT, md, mode);
return TRUE;
}
if (md->type == INFORM_ERROR_MARKER_MIT) {
HTML_OPEN_WITH("p", "class=\"documentationerrorbox\"");
HTML::begin_span(OUT, I"documentationerror");
WRITE("Error: %S", md->stashed);
HTML_CLOSE("span");
HTML_CLOSE("p");
return TRUE;
}
return FALSE;
}
@ An example is set with a two-table header, and followed optionally by a
table of its inset copy, shaded to distinguish it from the rest of the
page. The heading is constructed with a main table of one row of two cells,
in the following section. The left-hand cell then contains a further table,
in the next section.
=
void DocumentationInMarkdown::render_example_heading(OUTPUT_STREAM, cdoc_example *E,
markdown_item *passage_node) {
TEMPORARY_TEXT(link)
WRITE_TO(link, "style=\"text-decoration: none\" href=\"eg%d.html\"", E->number);
HTML_TAG("hr"); /* rule a line before the example heading */
HTML::begin_plain_html_table(OUT);
HTML_OPEN("tr");
/* Left hand cell: the oval icon */
HTML_OPEN_WITH("td", "halign=\"left\" valign=\"top\" cellpadding=0 cellspacing=0 width=38px");
HTML_OPEN_WITH("span", "id=eg%d", E->number); /* provide the anchor point */
@<Typeset the lettered oval example icon@>;
HTML_CLOSE("span"); /* end the textual link */
HTML_CLOSE("td");
/* Right hand cell: the asterisks and title, with rubric underneath */
HTML_OPEN_WITH("td", "cellpadding=0 cellspacing=0 halign=\"left\" valign=\"top\"");
if (passage_node == NULL) HTML_OPEN_WITH("a", "%S", link);
for (int asterisk = 0; asterisk < E->star_count; asterisk++)
PUT(0x2605); /* the Unicode for "black star" emoji */
/* or 0x2B50 is the Unicode for "star" emoji */
/* or again, could use the asterisk.png image in the app */
WRITE("&nbsp; ");
HTML_OPEN("b");
HTML::begin_span(OUT, I"indexdarkgrey");
WRITE("&nbsp;Example&nbsp;");
HTML::end_span(OUT);
HTML::begin_span(OUT, I"indexblack");
DocumentationRenderer::render_text(OUT, E->name);
HTML_TAG("br");
DocumentationRenderer::render_text(OUT, E->description);
HTML::end_span(OUT);
HTML_CLOSE("b");
if (passage_node == NULL) HTML_CLOSE("a"); /* Link does not cover body, only heading */
if (passage_node) {
while (passage_node) {
Markdown::render_extended(OUT, passage_node,
DocumentationInMarkdown::extension_flavoured_Markdown());
passage_node = passage_node->next;
}
}
HTML_CLOSE("td");
HTML_CLOSE("tr");
HTML::end_html_table(OUT);
DISCARD_TEXT(link)
}
@ The little oval icon with its superimposed boldface letter is much harder to
get right on all browsers than it looks, and the following is the result of
some pretty grim experimentation. Basically, we make a tight, borderless,
one-cell-in-one-row table, use CSS to make a transparent PNG image of an oval
the background image for the table, then put a boldface letter in the centre
of its one and only cell. (Things were even worse when IE6 for Windows still
had its infamous PNG transparency bug.)
@<Typeset the lettered oval example icon@> =
HTML::begin_plain_html_table(OUT);
HTML_OPEN_WITH("tr", "class=\"oval\"");
HTML_OPEN_WITH("td", "width=38px height=30px align=\"left\" valign=\"center\"");
if (passage_node == NULL) HTML_OPEN_WITH("a", "%S", link);
HTML_OPEN_WITH("div",
"class=\"paragraph Body\" style=\"line-height: 1px; margin-bottom: 0px; "
"margin-top: 0px; padding-bottom: 0pt; padding-top: 0px; text-align: center;\"");
HTML::begin_span(OUT, I"extensionexampleletter");
PUT(E->letter);
HTML::end_span(OUT);
HTML_CLOSE("div");
if (passage_node == NULL) HTML_CLOSE("a");
HTML_CLOSE("td");
HTML_CLOSE("tr");
HTML::end_html_table(OUT);
@ =
markdown_item *DocumentationInMarkdown::find_section(markdown_item *tree, text_stream *name) {
if (Str::len(name) == 0) return NULL;
markdown_item *result = NULL;
DocumentationInMarkdown::find(tree, name, &result);
return result;
}
void DocumentationInMarkdown::find(markdown_item *md, text_stream *name, markdown_item **result) {
if (md->type == HEADING_MIT) {
switch (Markdown::get_heading_level(md)) {
case 1:
case 2: {
int i=0;
for (; i<Str::len(md->stashed); i++)
if (Str::get_at(md->stashed, i) == ':') { i+=2; break; }
if (i + Str::len(name) == Str::len(md->stashed)) {
int fail = FALSE;
for (int j=0; j<Str::len(name); j++, i++)
if (Str::get_at(name, j) != Str::get_at(md->stashed, i)) { fail = TRUE; break; }
if ((fail == FALSE) && (*result == NULL)) *result = md;
}
break;
}
}
}
for (markdown_item *ch = md->down; ch; ch=ch->next) {
DocumentationInMarkdown::find(ch, name, result);
}
}
@ =
markdown_item *DocumentationInMarkdown::find_example(markdown_item *tree, int eg) {
if (eg <= 0) return NULL;
markdown_item *result = NULL;
int counter = 0;
DocumentationInMarkdown::find_e(tree, eg, &result, &counter);
return result;
}
void DocumentationInMarkdown::find_e(markdown_item *md, int eg, markdown_item **result, int *counter) {
if (md->type == INFORM_EXAMPLE_HEADING_MIT) {
(*counter)++;
if (*counter == eg) *result = md;
}
for (markdown_item *ch = md->down; ch; ch=ch->next) {
DocumentationInMarkdown::find_e(ch, eg, result, counter);
}
}
void DocumentationInMarkdown::render_code_block(OUTPUT_STREAM, markdown_item *md, int mode) {
if ((Str::eq_insensitive(md->info_string, I"inform")) ||
(Str::eq_insensitive(md->info_string, I"inform7")) ||
(Str::len(md->info_string) == 0)) {
@<Render as Inform 7 source text@>;
} else {
programming_language *pl = NULL;
if (mode & TAGS_MDRMODE) HTML_OPEN("pre");
TEMPORARY_TEXT(language)
for (int i=0; i<Str::len(md->info_string); i++) {
wchar_t c = Str::get_at(md->info_string, i);
if ((c == ' ') || (c == '\t')) break;
PUT_TO(language, c);
}
if (Str::len(language) > 0) {
TEMPORARY_TEXT(language_rendered)
md->sliced_from = language;
md->from = 0; md->to = Str::len(language) - 1;
MDRenderer::slice(language_rendered, md, mode | ENTITIES_MDRMODE);
if (mode & TAGS_MDRMODE)
HTML_OPEN_WITH("code", "class=\"language-%S\"", language_rendered);
pl = DocumentationCompiler::get_language(language_rendered);
if (pl == NULL) LOG("Unable to find language <%S>\n", language_rendered);
DISCARD_TEXT(language_rendered)
} else {
if (mode & TAGS_MDRMODE) HTML_OPEN("code");
}
DISCARD_TEXT(language)
Painter::reset_syntax_colouring(pl);
TEMPORARY_TEXT(line)
TEMPORARY_TEXT(line_colouring)
for (int k=0; k<Str::len(md->stashed); k++) {
if (Str::get_at(md->stashed, k) == '\n') {
@<Render line as code@>;
Str::clear(line);
Str::clear(line_colouring);
} else {
PUT_TO(line, Str::get_at(md->stashed, k));
}
if ((k == Str::len(md->stashed) - 1) && (Str::len(line) > 0)) @<Render line as code@>;
}
HTML_CLOSE("span");
DISCARD_TEXT(line)
DISCARD_TEXT(line_colouring)
if (mode & TAGS_MDRMODE) HTML_CLOSE("code");
if (mode & TAGS_MDRMODE) HTML_CLOSE("pre");
}
}
@<Render line as code@> =
if (pl) Painter::syntax_colour(pl, NULL, line, line_colouring, FALSE);
DocumentationInMarkdown::syntax_coloured_code(OUT, line, line_colouring,
0, Str::len(line), mode);
if (mode & TAGS_MDRMODE) WRITE("<br>"); else WRITE(" ");
@<Render as Inform 7 source text@> =
HTML_OPEN("blockquote");
if (GENERAL_POINTER_IS_NULL(md->user_state) == FALSE) {
markdown_item *first = RETRIEVE_POINTER_markdown_item(md->user_state);
TEMPORARY_TEXT(accumulated)
for (markdown_item *ch = md; ch; ch = ch->next) {
if (ch->type == CODE_BLOCK_MIT) {
if (GENERAL_POINTER_IS_NULL(ch->user_state) == FALSE) {
markdown_item *latest = RETRIEVE_POINTER_markdown_item(ch->user_state);
if (first == latest) WRITE_TO(accumulated, "%S", ch->stashed);
}
}
}
ExtensionWebsite::paste_button(OUT, accumulated);
}
TEMPORARY_TEXT(colouring)
programming_language *default_language = DocumentationCompiler::get_language(I"Inform");
programming_language *pl = default_language;
if (pl) {
Painter::reset_syntax_colouring(pl);
Painter::syntax_colour(pl, NULL, md->stashed, colouring, FALSE);
if (Str::eq(pl->language_name, I"Inform")) {
int ts = FALSE;
for (int i=0; i<Str::len(colouring); i++) {
if (Str::get_at(colouring, i) == STRING_COLOUR) {
wchar_t c = Str::get_at(md->stashed, i);
if (c == '[') ts = TRUE;
if (ts) Str::put_at(colouring, i, EXTRACT_COLOUR);
if (c == ']') ts = FALSE;
} else ts = FALSE;
}
}
}
HTML::begin_span(OUT, I"indexdullblue");
int tabulating = FALSE, tabular = FALSE, line_count = 0;
TEMPORARY_TEXT(line)
TEMPORARY_TEXT(line_colouring)
for (int k=0; k<Str::len(md->stashed); k++) {
if (Str::get_at(md->stashed, k) == '\n') {
@<Render line@>;
Str::clear(line);
Str::clear(line_colouring);
} else {
PUT_TO(line, Str::get_at(md->stashed, k));
PUT_TO(line_colouring, Str::get_at(colouring, k));
}
if (k == Str::len(md->stashed) - 1) @<Render line@>;
}
HTML_CLOSE("span");
if (tabulating) @<End I7 table in extension documentation@>;
HTML_CLOSE("blockquote");
DISCARD_TEXT(line)
DISCARD_TEXT(line_colouring)
@<Render line@> =
line_count++;
if (Str::is_whitespace(line)) tabular = FALSE;
match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, line, L"Table %c*")) tabular = TRUE;
Regexp::dispose_of(&mr);
if (tabular) {
if (tabulating) {
@<Begin new row of I7 table in extension documentation@>;
} else {
@<Begin I7 table in extension documentation@>;
tabulating = TRUE;
}
int cell_from = 0, cell_to = 0, i = 0;
@<Begin table cell for I7 table in extension documentation@>;
for (; i<Str::len(line); i++) {
if (Str::get_at(line, i) == '\t') {
@<End table cell for I7 table in extension documentation@>;
while (Str::get_at(line, i) == '\t') i++;
@<Begin table cell for I7 table in extension documentation@>;
i--;
} else {
cell_to++;
}
}
@<End table cell for I7 table in extension documentation@>;
@<End row of I7 table in extension documentation@>;
} else {
if (line_count > 1) HTML_TAG("br");
if (tabulating) {
@<End I7 table in extension documentation@>;
tabulating = FALSE;
}
int indentation = 1;
int z=0, spaces = 0;
for (; z<Str::len(line); z++)
if (Str::get_at(line, z) == ' ') { spaces++; if (spaces == 4) { indentation++; spaces = 0; } }
else if (Str::get_at(line, z) == '\t') { indentation++; spaces = 0; }
else break;
for (int n=0; n<indentation; n++) WRITE("&nbsp;&nbsp;&nbsp;&nbsp;");
DocumentationInMarkdown::syntax_coloured_code(OUT, line, line_colouring,
z, Str::len(line), mode);
}
WRITE("\n");
@ Unsurprisingly, I7 tables are set (after their titling lines) as HTML tables,
and this is fiddly but elementary in the usual way of HTML tables:
@<Begin I7 table in extension documentation@> =
HTML::end_span(OUT);
HTML_TAG("br");
HTML::begin_plain_html_table(OUT);
HTML::first_html_column(OUT, 0);
@<End table cell for I7 table in extension documentation@> =
DocumentationInMarkdown::syntax_coloured_code(OUT, line, line_colouring,
cell_from, cell_to, mode);
HTML::end_span(OUT);
HTML::next_html_column(OUT, 0);
@<Begin table cell for I7 table in extension documentation@> =
cell_from = i; cell_to = cell_from;
HTML::begin_span(OUT, I"indexdullblue");
@<Begin new row of I7 table in extension documentation@> =
HTML::first_html_column(OUT, 0);
@<End row of I7 table in extension documentation@> =
HTML::end_html_row(OUT);
@<End I7 table in extension documentation@> =
HTML::end_html_table(OUT);
HTML::begin_span(OUT, I"indexdullblue");
@ =
void DocumentationInMarkdown::syntax_coloured_code(OUTPUT_STREAM, text_stream *text,
text_stream *colouring, int from, int to, int mode) {
wchar_t current_col = 0;
for (int i=from; i<to; i++) {
wchar_t c = Str::get_at(text, i);
wchar_t col = Str::get_at(colouring, i);
if (col != current_col) {
if (current_col) HTML_CLOSE("span");
text_stream *span_class = NULL;
switch (col) {
case DEFINITION_COLOUR: span_class = I"syntaxdefinition"; break;
case FUNCTION_COLOUR: span_class = I"syntaxfunction"; break;
case RESERVED_COLOUR: span_class = I"syntaxreserved"; break;
case ELEMENT_COLOUR: span_class = I"syntaxelement"; break;
case IDENTIFIER_COLOUR: span_class = I"syntaxidentifier"; break;
case CHARACTER_COLOUR: span_class = I"syntaxcharacter"; break;
case CONSTANT_COLOUR: span_class = I"syntaxconstant"; break;
case STRING_COLOUR: span_class = I"syntaxstring"; break;
case PLAIN_COLOUR: span_class = I"syntaxplain"; break;
case EXTRACT_COLOUR: span_class = I"syntaxextract"; break;
case COMMENT_COLOUR: span_class = I"syntaxcomment"; break;
}
HTML_OPEN_WITH("span", "class=\"%S\"", span_class);
current_col = col;
}
MDRenderer::char(OUT, c, mode);
}
if (current_col) HTML_CLOSE("span");
}

View file

@ -64,6 +64,6 @@ Chapter 7: Extension Management
Extensions Index Page
The Installer
The Converter
Documentation Tree
Documentation Compiler
Documentation Renderer
Documentation in Markdown

View file

@ -1,16 +1,16 @@
Total memory consumption was 141889K = 139 MB
Total memory consumption was 141980K = 139 MB
---- was used for 2128973 objects, in 374985 frames in 0 x 800K = 0K = 0 MB:
---- was used for 2129615 objects, in 374727 frames in 0 x 800K = 0K = 0 MB:
29.7% inter_tree_node_array 60 x 8192 = 491520 objects, 43255680 bytes
19.1% text_stream_array 4930 x 100 = 493000 objects, 27765760 bytes
17.4% linked_list 45356 objects, 25399360 bytes
19.0% text_stream_array 4929 x 100 = 492900 objects, 27760128 bytes
17.4% linked_list 45355 objects, 25398800 bytes
9.8% inter_symbol_array 135 x 1024 = 138240 objects, 14381280 bytes
9.6% inter_error_stash_array 107 x 1024 = 109568 objects, 14028128 bytes
7.3% parse_node 133796 objects, 10703680 bytes
5.2% verb_conjugation 164 objects, 7610912 bytes
3.9% parse_node_annotation_array 357 x 500 = 178500 objects, 5723424 bytes
3.1% scan_directory 1092 objects, 4507776 bytes
3.0% scan_directory 1091 objects, 4503648 bytes
2.4% pcalc_prop_array 26 x 1000 = 26000 objects, 3536832 bytes
2.2% inter_name_array 67 x 1000 = 67000 objects, 3218144 bytes
1.8% kind_array 68 x 1000 = 68000 objects, 2722176 bytes
@ -36,7 +36,7 @@ Total memory consumption was 141889K = 139 MB
0.3% local_variable_array 49 x 100 = 4900 objects, 471968 bytes
0.2% verb_usage 1148 objects, 394912 bytes
0.2% rule 478 objects, 374752 bytes
0.2% dictionary 7756 objects, 372288 bytes
0.2% dictionary 7759 objects, 372432 bytes
0.2% verb_form 388 objects, 350752 bytes
0.1% noun 2395 objects, 287400 bytes
0.1% compilation_subtask 3388 objects, 271040 bytes
@ -49,6 +49,7 @@ Total memory consumption was 141889K = 139 MB
0.1% rule_family_data 404 objects, 148672 bytes
---- nonterminal 773 objects, 142232 bytes
---- nascent_array 2130 objects, 136320 bytes
---- markdown_item_array 1 x 1000 objects, 128032 bytes
---- inference 1705 objects, 122760 bytes
---- pcalc_term_array 3 x 1000 = 3000 objects, 120096 bytes
---- documentation_ref 1278 objects, 112464 bytes
@ -65,8 +66,8 @@ Total memory consumption was 141889K = 139 MB
---- spatial_data 677 objects, 64992 bytes
---- kind_constructor 79 objects, 64464 bytes
---- linked_list_item_array 4 x 1000 = 4000 objects, 64128 bytes
---- scenes_rcd_data 1958 objects, 62656 bytes
---- actions_rcd_data 1958 objects, 62656 bytes
---- scenes_rcd_data 1958 objects, 62656 bytes
---- booking 868 objects, 62496 bytes
---- kind_macro_definition 9 objects, 62280 bytes
---- command_grammar 130 objects, 58240 bytes
@ -81,19 +82,19 @@ Total memory consumption was 141889K = 139 MB
---- heading 212 objects, 47488 bytes
---- to_family_data 527 objects, 42160 bytes
---- text_substitution 438 objects, 42048 bytes
---- activity_list_array 1 x 1000 objects, 40032 bytes
---- anl_clause_array 1 x 1000 objects, 40032 bytes
---- activity_list_array 1 x 1000 objects, 40032 bytes
---- shared_variable_access_list_array 12 x 100 = 1200 objects, 38784 bytes
---- parsing_data 677 objects, 37912 bytes
---- production_list 627 objects, 35112 bytes
---- regions_data 677 objects, 32496 bytes
---- counting_data 677 objects, 32496 bytes
---- regions_data 677 objects, 32496 bytes
---- property_permission 96 objects, 31488 bytes
---- stack_frame_box 307 objects, 29472 bytes
---- verb_sense 407 objects, 29304 bytes
---- action_pattern_array 7 x 100 = 700 objects, 28224 bytes
---- filename 703 objects, 28120 bytes
---- pathname 660 objects, 26400 bytes
---- filename 702 objects, 28080 bytes
---- pathname 657 objects, 26280 bytes
---- shared_variable_set_array 6 x 100 = 600 objects, 24192 bytes
---- parse_node_tree 27 objects, 23544 bytes
---- property 148 objects, 22496 bytes
@ -102,8 +103,8 @@ Total memory consumption was 141889K = 139 MB
---- nonlocal_variable 94 objects, 20304 bytes
---- pipeline_step 15 objects, 20280 bytes
---- action_name 90 objects, 20160 bytes
---- method 406 objects, 19488 bytes
---- timed_rules_rfd_data 404 objects, 19392 bytes
---- method 403 objects, 19344 bytes
---- build_vertex 157 objects, 18840 bytes
---- instance 162 objects, 18144 bytes
---- pcalc_prop_deferral 86 objects, 17888 bytes
@ -111,16 +112,15 @@ Total memory consumption was 141889K = 139 MB
---- understanding_reference_array 2 x 100 = 200 objects, 16064 bytes
---- match_avinue_array 1 x 1000 objects, 16032 bytes
---- action_name_list_array 1 x 1000 objects, 16032 bytes
---- md_doc_state 3 objects, 15720 bytes
---- adjective 140 objects, 15680 bytes
---- JSON_value 174 objects, 15312 bytes
---- booking_list 407 objects, 13024 bytes
---- web_bibliographic_datum 203 objects, 12992 bytes
---- adjective_iname_holder 323 objects, 12920 bytes
---- tree_node 148 objects, 11840 bytes
---- uniqueness_count 482 objects, 11568 bytes
---- inter_construct 32 objects, 11008 bytes
---- stopwatch_timer 124 objects, 9920 bytes
---- programming_language 1 object, 8792 bytes
---- heading_tree 27 objects, 8424 bytes
---- inbuild_work 124 objects, 7936 bytes
---- equation_node 68 objects, 7616 bytes
@ -134,7 +134,6 @@ Total memory consumption was 141889K = 139 MB
---- inbuild_edition 85 objects, 6120 bytes
---- section_md 62 objects, 5952 bytes
---- parsed_use_option_setting 79 objects, 5688 bytes
---- cdoc_code_line 110 objects, 5280 bytes
---- activity 35 objects, 5040 bytes
---- build_script 157 objects, 5024 bytes
---- inform_extension 26 objects, 4992 bytes
@ -145,9 +144,9 @@ Total memory consumption was 141889K = 139 MB
---- command_line_switch 56 objects, 4480 bytes
---- semver_range 42 objects, 4368 bytes
---- use_option 31 objects, 4216 bytes
---- either_or_property_data 62 objects, 3968 bytes
---- method_set 129 objects, 4128 bytes
---- parse_node_annotation_type 124 objects, 3968 bytes
---- method_set 109 objects, 3488 bytes
---- either_or_property_data 62 objects, 3968 bytes
---- definition 48 objects, 3456 bytes
---- property_setting_bp_data 86 objects, 3440 bytes
---- submodule_request 86 objects, 3440 bytes
@ -168,8 +167,8 @@ Total memory consumption was 141889K = 139 MB
---- inform_pipeline 24 objects, 1536 bytes
---- inbuild_requirement 37 objects, 1480 bytes
---- noun_filter_token 22 objects, 1408 bytes
---- special_meaning_holder 35 objects, 1400 bytes
---- inter_node_array 35 objects, 1400 bytes
---- special_meaning_holder 35 objects, 1400 bytes
---- JSON_requirement 42 objects, 1344 bytes
---- constant_phrase 20 objects, 1280 bytes
---- table_column 16 objects, 1280 bytes
@ -184,6 +183,7 @@ Total memory consumption was 141889K = 139 MB
---- pipeline_stage 20 objects, 960 bytes
---- named_rulebook_outcome 15 objects, 960 bytes
---- JSON_pair_requirement 29 objects, 928 bytes
---- markdown_feature 19 objects, 912 bytes
---- control_structure_phrase 12 objects, 864 bytes
---- cached_understanding 21 objects, 840 bytes
---- kit_configuration 21 objects, 840 bytes
@ -195,76 +195,71 @@ Total memory consumption was 141889K = 139 MB
---- implication 13 objects, 624 bytes
---- chapter_md 7 objects, 616 bytes
---- code_generation 1 object, 576 bytes
---- cdoc_paragraph 18 objects, 576 bytes
---- inter_warehouse_room 10 objects, 560 bytes
---- module 7 objects, 560 bytes
---- inter_annotation_form 14 objects, 560 bytes
---- generated_segment 14 objects, 560 bytes
---- inter_warehouse_room 10 objects, 560 bytes
---- rulebook_outcome 17 objects, 544 bytes
---- small_word_set 11 objects, 528 bytes
---- equation 4 objects, 480 bytes
---- i6_memory_setting 15 objects, 480 bytes
---- inbuild_genre 8 objects, 448 bytes
---- bp_family 14 objects, 448 bytes
---- inference_family 11 objects, 440 bytes
---- source_file 5 objects, 440 bytes
---- inference_family 11 objects, 440 bytes
---- article_usage 8 objects, 384 bytes
---- tree_node_type 8 objects, 384 bytes
---- tree_inventory 1 object, 320 bytes
---- pronoun 8 objects, 320 bytes
---- module_request 8 objects, 320 bytes
---- grammatical_category 8 objects, 320 bytes
---- cached_kind_declaration 8 objects, 320 bytes
---- door_dir_notice 5 objects, 320 bytes
---- grammatical_category 8 objects, 320 bytes
---- pronoun 8 objects, 320 bytes
---- tree_inventory 1 object, 320 bytes
---- cached_kind_declaration 8 objects, 320 bytes
---- inter_pipeline 1 object, 312 bytes
---- compiled_documentation 3 objects, 288 bytes
---- cdoc_code_sample 6 objects, 288 bytes
---- up_family 9 objects, 288 bytes
---- compiled_documentation 3 objects, 288 bytes
---- contents_entry 7 objects, 280 bytes
---- explicit_bp_data 5 objects, 280 bytes
---- compilation_unit 5 objects, 280 bytes
---- door_to_notice 5 objects, 280 bytes
---- kit_dependency 5 objects, 240 bytes
---- explicit_bp_data 5 objects, 280 bytes
---- verb_usage_tier 5 objects, 240 bytes
---- kit_dependency 5 objects, 240 bytes
---- markdown_variation 2 objects, 240 bytes
---- inform_project 1 object, 232 bytes
---- local_block_value 4 objects, 224 bytes
---- adjective_meaning_family 7 objects, 224 bytes
---- local_block_value 4 objects, 224 bytes
---- test_scenario 1 object, 216 bytes
---- release_instructions 1 object, 208 bytes
---- code_generator 5 objects, 200 bytes
---- build_skill 5 objects, 200 bytes
---- attachment_instruction 5 objects, 200 bytes
---- plural_dictionary_entry 4 objects, 192 bytes
---- cdoc_example 4 objects, 192 bytes
---- element_activation 6 objects, 192 bytes
---- cdoc_heading 3 objects, 168 bytes
---- cdoc_passage 7 objects, 168 bytes
---- inter_architecture 4 objects, 160 bytes
---- inference_subject_family 5 objects, 160 bytes
---- plural_dictionary_entry 4 objects, 192 bytes
---- imperative_defn_family 4 objects, 160 bytes
---- inference_subject_family 5 objects, 160 bytes
---- inter_architecture 4 objects, 160 bytes
---- inbuild_nest 3 objects, 120 bytes
---- heterogeneous_tree 3 objects, 120 bytes
---- inform_language 1 object, 104 bytes
---- article 2 objects, 80 bytes
---- md_links_dictionary 3 objects, 96 bytes
---- group_together_function 2 objects, 80 bytes
---- compile_task_data 1 object, 80 bytes
---- article 2 objects, 80 bytes
---- build_methodology 1 object, 56 bytes
---- figures_data 1 object, 56 bytes
---- inter_warehouse 1 object, 56 bytes
---- star_invention 1 object, 48 bytes
---- HTML_file_state 1 object, 48 bytes
---- figures_data 1 object, 56 bytes
---- inform_kit_ittt 1 object, 48 bytes
---- HTML_file_state 1 object, 48 bytes
---- I6_generation_data 1 object, 48 bytes
---- star_invention 1 object, 48 bytes
---- target_pragma_setting 1 object, 40 bytes
---- by_function_bp_data 1 object, 40 bytes
---- kind_template_definition 1 object, 40 bytes
---- tree_type 1 object, 40 bytes
---- loop_over_scope 1 object, 40 bytes
---- kind_template_definition 1 object, 40 bytes
---- by_function_bp_data 1 object, 40 bytes
99.9% was used for memory not allocated for objects:
100.0% was used for memory not allocated for objects:
62.9% text stream storage 91428036 bytes in 513469 claims
3.7% dictionary storage 5481984 bytes in 7756 claims
62.9% text stream storage 91518592 bytes in 513387 claims
3.7% dictionary storage 5485056 bytes in 7759 claims
---- sorting 2624 bytes in 531 claims
4.9% source text 7200000 bytes in 3 claims
7.4% source text details 10800000 bytes in 2 claims
@ -281,5 +276,5 @@ Total memory consumption was 141889K = 139 MB
---- code generation workspace for objects 3488 bytes in 19 claims
0.1% emitter array storage 281184 bytes in 2006 claims
-134.-4% was overhead - -195324192 bytes = -190746K = -186 MB
-134.-4% was overhead - -195431984 bytes = -190851K = -186 MB

View file

@ -1,29 +1,29 @@
100.0% in inform7 run
67.8% in compilation to Inter
68.1% in compilation to Inter
45.9% in //Sequence::undertake_queued_tasks//
4.2% in //MajorNodes::pre_pass//
3.4% in //MajorNodes::pass_1//
1.9% in //ImperativeDefinitions::assess_all//
1.9% in //RTPhrasebook::compile_entries//
1.5% in //RTKindConstructors::compile//
4.4% in //MajorNodes::pre_pass//
3.7% in //MajorNodes::pass_1//
1.8% in //ImperativeDefinitions::assess_all//
1.8% in //RTPhrasebook::compile_entries//
1.4% in //RTKindConstructors::compile//
1.1% in //Sequence::lint_inter//
0.7% in //ImperativeDefinitions::compile_first_block//
0.7% in //Sequence::undertake_queued_tasks//
0.7% in //World::stage_V//
0.3% in //CompletionModule::compile//
0.3% in //ImperativeDefinitions::compile_first_block//
0.3% in //MajorNodes::pass_2//
0.3% in //RTKindConstructors::compile_permissions//
0.3% in //Sequence::undertake_queued_tasks//
0.3% in //Sequence::undertake_queued_tasks//
0.3% in //World::stage_V//
5.0% not specifically accounted for
27.5% in running Inter pipeline
4.1% not specifically accounted for
27.4% in running Inter pipeline
8.8% in step 14/15: generate inform6 -> auto.inf
7.2% in step 5/15: load-binary-kits
5.7% in step 6/15: make-synoptic-module
1.9% in step 9/15: make-identifiers-unique
7.0% in step 5/15: load-binary-kits
5.9% in step 6/15: make-synoptic-module
1.8% in step 9/15: make-identifiers-unique
0.3% in step 12/15: eliminate-redundant-operations
0.3% in step 4/15: compile-splats
0.3% in step 7/15: shorten-wiring
0.3% in step 8/15: detect-indirect-calls
2.3% not specifically accounted for
3.8% in supervisor
3.7% in supervisor
0.8% not specifically accounted for

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "Architecture16Kit",
"version": "10.2.0-beta+6X03"
"version": "10.2.0-beta+6X04"
},
"compatibility": "16-bit",
"kit-details": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "Architecture32Kit",
"version": "10.2.0-beta+6X03"
"version": "10.2.0-beta+6X04"
},
"compatibility": "32-bit",
"kit-details": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "BasicInformKit",
"version": "10.2.0-beta+6X03"
"version": "10.2.0-beta+6X04"
},
"needs": [ {
"need": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "CommandParserKit",
"version": "10.2.0-beta+6X03"
"version": "10.2.0-beta+6X04"
},
"needs": [ {
"need": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "EnglishLanguageKit",
"version": "10.2.0-beta+6X03"
"version": "10.2.0-beta+6X04"
},
"needs": [ {
"need": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "WorldModelKit",
"version": "10.2.0-beta+6X03"
"version": "10.2.0-beta+6X04"
},
"needs": [ {
"need": {

View file

@ -1,4 +1,4 @@
Name: "Inform 6"
Name: "Inform6"
Details: "The C-like interactive fiction language Inform 6"
Extension: ".i6"
Line Comment: "!"