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

Further work on extension documentation

This commit is contained in:
Graham Nelson 2023-08-24 23:03:41 +01:00
parent 9b619563f5
commit 563142e730
21 changed files with 559 additions and 191 deletions

View file

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

View file

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

View file

@ -424,7 +424,7 @@ copy name.
<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">subdir</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">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</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="identifier-syntax">doc_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">continue</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">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Documentation.md"</span><span class="plain-syntax">)) { </span><span class="identifier-syntax">doc_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">continue</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">error_text</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">error_text</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"the 'Documentation' subdirectory of the extension directory '%S' contains a "</span>
@ -438,7 +438,7 @@ copy name.
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_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="identifier-syntax">WRITE_TO</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="string-syntax">"the 'Documentation' subdirectory of the extension directory '%S' is optional, "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"but if it does exist then it needs to contain a file called 'Documentation.txt'"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"but if it does exist then it needs to contain a file called 'Documentation.md'"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">));</span>
<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">C</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">METADATA_MALFORMED_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>

View file

@ -136,7 +136,7 @@ from 1, 2, ...; letters are unique from A, B, C, ...
<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="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.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">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#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>

View file

@ -115,7 +115,7 @@ space either side.
<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><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="constant-syntax">0</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>
@ -196,40 +196,49 @@ space either side.
<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">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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">level</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">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">PARAGRAPH_MIT</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">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="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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">level</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">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">PARAGRAPH_MIT</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">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="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><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="plain-syntax"> </span><span class="identifier-syntax">latest</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="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
@ -320,6 +329,41 @@ space either side.
<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="identifier-syntax">BLOCK_QUOTE_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">) &amp;&amp; (</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</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">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">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"phrase: *{(%c*?)} *(%c+?)\n(%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">md</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stashed</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"(phrase): *(%c+?)\n(%c*)"</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="identifier-syntax">WRITE</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">[1]);</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_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">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">remainder</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Markdown::parse_inline_extended</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">[2], </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">Markdown::render_extended</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">remainder</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">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">-&gt;</span><span class="identifier-syntax">next</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="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">ch</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="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">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="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="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_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">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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Markdown::get_backtick_count</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">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=\"inlinesourcetext\""</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">"code"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"inlinecode\""</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">mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mode</span><span class="plain-syntax"> &amp; (~</span><span class="identifier-syntax">ESCAPES_MDRMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mode</span><span class="plain-syntax"> &amp; (~</span><span class="identifier-syntax">ENTITIES_MDRMODE</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">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">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">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>
@ -345,19 +389,18 @@ in the next section.
<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="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=\"examplebox\""</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">"div"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"exampleleft\""</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="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="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="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=\"exampleright\""</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>
@ -374,8 +417,10 @@ in the next section.
<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="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>
<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>
@ -385,10 +430,6 @@ in the next section.
<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>
@ -405,21 +446,11 @@ had its infamous PNG transparency bug.)
</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>
@ -477,34 +508,44 @@ had its infamous PNG transparency bug.)
<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="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">language_text</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="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_text</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(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">'&gt;'</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> ((</span><span class="identifier-syntax">i</span><span class="plain-syntax">==0) || (</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">-1) == </span><span class="character-syntax">'\n'</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">language_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"transcript"</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_text</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">language_text</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="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">language_text</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">language_text</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="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="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="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">language_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">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">language_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="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="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">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">language_rendered</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="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">"div"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"extract-%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="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="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_rendered</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="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>
@ -524,6 +565,11 @@ had its infamous PNG transparency bug.)
<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="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_rendered</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="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">"div"</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_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</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
@ -586,7 +632,7 @@ had its infamous PNG transparency bug.)
<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="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_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>
@ -631,7 +677,7 @@ had its infamous PNG transparency bug.)
<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">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="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>

View file

@ -146,7 +146,7 @@ a text file or directory.
<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="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">read_into_file</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">torn_off_documentation</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">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="7-tc.html#SP2" class="function-link"><span class="function-syntax">ExtensionConverter::mkdir</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">P_documentation</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="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F_documentation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">P_documentation</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="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F_documentation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">P_documentation</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Documentation.md"</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">DOCF_struct</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_documentation</span><span class="plain-syntax"> = &amp;</span><span class="identifier-syntax">DOCF_struct</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="7-tc.html#SP2" class="function-link"><span class="function-syntax">ExtensionConverter::fopen</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">S_documentation</span><span class="plain-syntax">, </span><span class="identifier-syntax">F_documentation</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>

View file

@ -347,7 +347,7 @@ inbuild_copy *ExtensionBundleManager::claim_folder_as_copy(pathname *P, inbuild_
}
DISCARD_TEXT(subdir)
} else {
if (Str::eq(entry, I"Documentation.txt")) { doc_found = TRUE; continue; }
if (Str::eq(entry, I"Documentation.md")) { doc_found = TRUE; continue; }
TEMPORARY_TEXT(error_text)
WRITE_TO(error_text,
"the 'Documentation' subdirectory of the extension directory '%S' contains a "
@ -361,7 +361,7 @@ inbuild_copy *ExtensionBundleManager::claim_folder_as_copy(pathname *P, inbuild_
TEMPORARY_TEXT(error_text)
WRITE_TO(error_text,
"the 'Documentation' subdirectory of the extension directory '%S' is optional, "
"but if it does exist then it needs to contain a file called 'Documentation.txt'",
"but if it does exist then it needs to contain a file called 'Documentation.md'",
Pathnames::directory_name(P));
Copies::attach_error(C, CopyErrors::new_T(METADATA_MALFORMED_CE, -1, error_text));
DISCARD_TEXT(error_text)

View file

@ -74,7 +74,7 @@ cdoc_example *DocumentationCompiler::new_example_alone(text_stream *title, text_
=
compiled_documentation *DocumentationCompiler::compile_from_path(pathname *P,
inform_extension *associated_extension) {
filename *F = Filenames::in(P, I"Documentation.txt");
filename *F = Filenames::in(P, I"Documentation.md");
if (TextFiles::exists(F) == FALSE) return NULL;
compiled_documentation *cd =
DocumentationCompiler::compile_from_file(F, associated_extension);

View file

@ -54,7 +54,7 @@ void DocumentationInMarkdown::Inform_headings_intervene_after_Phase_I(markdown_f
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);
DocumentationInMarkdown::number_headings_r(tree, &section_number, &chapter_number, latest, 0);
DISCARD_TEXT(latest)
}
@ -131,40 +131,49 @@ void DocumentationInMarkdown::regroup_examples_r(markdown_item *md, int *example
@ =
void DocumentationInMarkdown::number_headings_r(markdown_item *md,
int *section_number, int *chapter_number, text_stream *latest) {
int *section_number, int *chapter_number, text_stream *latest, int level) {
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);
if (level > 1) {
MDBlockParser::change_type(NULL, md, PARAGRAPH_MIT);
} else {
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);
if (level > 1) {
MDBlockParser::change_type(NULL, md, PARAGRAPH_MIT);
} else {
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);
DocumentationInMarkdown::number_headings_r(ch, section_number, chapter_number,
latest, level + 1);
}
}
@ -255,6 +264,41 @@ int DocumentationInMarkdown::paste_icons_renderer(markdown_feature *feature, tex
DocumentationInMarkdown::render_code_block(OUT, md, mode);
return TRUE;
}
if (md->type == BLOCK_QUOTE_MIT) {
if ((md->down) && (md->down->type == PARAGRAPH_MIT)) {
match_results mr = Regexp::create_mr();
if ((Regexp::match(&mr, md->down->stashed, L"phrase: *{(%c*?)} *(%c+?)\n(%c*)")) ||
(Regexp::match(&mr, md->down->stashed, L"(phrase): *(%c+?)\n(%c*)"))) {
HTML_OPEN_WITH("div", "class=\"definition\"");
HTML_OPEN_WITH("p", "class=\"defnprototype\"");
WRITE("%S", mr.exp[1]);
HTML_CLOSE("p");
HTML_TAG("br");
markdown_item *remainder = Markdown::parse_inline_extended(mr.exp[2], DocumentationInMarkdown::extension_flavoured_Markdown());
Markdown::render_extended(OUT, remainder, DocumentationInMarkdown::extension_flavoured_Markdown());
for (markdown_item *ch = md->down->next; ch; ch = ch->next)
Markdown::render_extended(OUT, ch, DocumentationInMarkdown::extension_flavoured_Markdown());
HTML_CLOSE("div");
Regexp::dispose_of(&mr);
return TRUE;
}
Regexp::dispose_of(&mr);
}
}
if (md->type == CODE_MIT) {
if (mode & TAGS_MDRMODE) {
if (Markdown::get_backtick_count(md) == 1) {
HTML_OPEN_WITH("code", "class=\"inlinesourcetext\"");
} else {
HTML_OPEN_WITH("code", "class=\"inlinecode\"");
}
}
mode = mode & (~ESCAPES_MDRMODE);
mode = mode & (~ENTITIES_MDRMODE);
MDRenderer::slice(OUT, md, mode);
if (mode & TAGS_MDRMODE) HTML_CLOSE("code");
return TRUE;
}
if (md->type == INFORM_ERROR_MARKER_MIT) {
HTML_OPEN_WITH("p", "class=\"documentationerrorbox\"");
HTML::begin_span(OUT, I"documentationerror");
@ -279,19 +323,18 @@ void DocumentationInMarkdown::render_example_heading(OUTPUT_STREAM, cdoc_example
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");
HTML_OPEN_WITH("div", "class=\"examplebox\"");
/* Left hand cell: the oval icon */
HTML_OPEN_WITH("td", "halign=\"left\" valign=\"top\" cellpadding=0 cellspacing=0 width=38px");
HTML_OPEN_WITH("div", "class=\"exampleleft\"");
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");
HTML_CLOSE("div");
/* Right hand cell: the asterisks and title, with rubric underneath */
HTML_OPEN_WITH("td", "cellpadding=0 cellspacing=0 halign=\"left\" valign=\"top\"");
HTML_OPEN_WITH("div", "class=\"exampleright\"");
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 */
@ -308,8 +351,10 @@ void DocumentationInMarkdown::render_example_heading(OUTPUT_STREAM, cdoc_example
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 */
HTML_CLOSE("div");
HTML_CLOSE("div");
if (passage_node) {
while (passage_node) {
@ -319,10 +364,6 @@ void DocumentationInMarkdown::render_example_heading(OUTPUT_STREAM, cdoc_example
}
}
HTML_CLOSE("td");
HTML_CLOSE("tr");
HTML::end_html_table(OUT);
DISCARD_TEXT(link)
}
@ -335,21 +376,11 @@ 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) {
@ -402,34 +433,44 @@ void DocumentationInMarkdown::find_e(markdown_item *md, int eg, markdown_item **
}
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)) {
text_stream *language_text = md->info_string;
if (Str::len(language_text) == 0) {
for (int i=0; i<Str::len(md->stashed); i++)
if ((Str::get_at(md->stashed, i) == '>') &&
((i==0) || (Str::get_at(md->stashed, i-1) == '\n')))
language_text = I"transcript";
if (Str::len(language_text) == 0) language_text = I"inform";
}
if ((Str::eq_insensitive(language_text, I"inform")) ||
(Str::eq_insensitive(language_text, I"inform7"))) {
@<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);
TEMPORARY_TEXT(language_rendered)
for (int i=0; i<Str::len(language_text); i++) {
wchar_t c = Str::get_at(language_text, 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);
}
programming_language *pl = NULL;
if (Str::len(language_rendered) > 0) {
if (mode & TAGS_MDRMODE)
HTML_OPEN_WITH("div", "class=\"extract-%S\"", language_rendered);
}
if (mode & TAGS_MDRMODE) HTML_OPEN("pre");
if (Str::len(language_rendered) > 0) {
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)
@ -449,6 +490,11 @@ void DocumentationInMarkdown::render_code_block(OUTPUT_STREAM, markdown_item *md
DISCARD_TEXT(line_colouring)
if (mode & TAGS_MDRMODE) HTML_CLOSE("code");
if (mode & TAGS_MDRMODE) HTML_CLOSE("pre");
if (Str::len(language_rendered) > 0) {
if (mode & TAGS_MDRMODE) HTML_CLOSE("div");
}
DISCARD_TEXT(language_rendered)
DISCARD_TEXT(language)
}
}
@ -504,7 +550,7 @@ void DocumentationInMarkdown::render_code_block(OUTPUT_STREAM, markdown_item *md
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@>;
if ((k == Str::len(md->stashed) - 1) && (Str::len(line) > 0)) @<Render line@>;
}
HTML_CLOSE("span");
if (tabulating) @<End I7 table in extension documentation@>;
@ -545,7 +591,7 @@ void DocumentationInMarkdown::render_code_block(OUTPUT_STREAM, markdown_item *md
@<End I7 table in extension documentation@>;
tabulating = FALSE;
}
int indentation = 1;
int indentation = 0;
int z=0, spaces = 0;
for (; z<Str::len(line); z++)
if (Str::get_at(line, z) == ' ') { spaces++; if (spaces == 4) { indentation++; spaces = 0; } }

View file

@ -74,7 +74,7 @@ void ExtensionConverter::go(inform_extension *E, text_stream *OUT) {
text_stream *source = E->read_into_file->torn_off_documentation;
if (Str::is_whitespace(source) == FALSE) {
if (ExtensionConverter::mkdir(E, OUT, P_documentation) == FALSE) return;
filename *F_documentation = Filenames::in(P_documentation, I"Documentation.txt");
filename *F_documentation = Filenames::in(P_documentation, I"Documentation.md");
text_stream DOCF_struct;
text_stream *S_documentation = &DOCF_struct;
if (ExtensionConverter::fopen(E, OUT, S_documentation, F_documentation) == FALSE) return;

View file

@ -1,9 +1,9 @@
Total memory consumption was 141982K = 139 MB
Total memory consumption was 142061K = 139 MB
---- was used for 2129619 objects, in 374731 frames in 0 x 800K = 0K = 0 MB:
---- was used for 2129729 objects, in 374742 frames in 0 x 800K = 0K = 0 MB:
29.7% inter_tree_node_array 60 x 8192 = 491520 objects, 43255680 bytes
19.0% text_stream_array 4929 x 100 = 492900 objects, 27760128 bytes
19.0% text_stream_array 4930 x 100 = 493000 objects, 27765760 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
@ -66,8 +66,8 @@ Total memory consumption was 141982K = 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
---- actions_rcd_data 1958 objects, 62656 bytes
---- scenes_rcd_data 1958 objects, 62656 bytes
---- actions_rcd_data 1958 objects, 62656 bytes
---- booking 868 objects, 62496 bytes
---- kind_macro_definition 9 objects, 62280 bytes
---- command_grammar 130 objects, 58240 bytes
@ -82,8 +82,8 @@ Total memory consumption was 141982K = 139 MB
---- heading 212 objects, 47488 bytes
---- to_family_data 527 objects, 42160 bytes
---- text_substitution 438 objects, 42048 bytes
---- anl_clause_array 1 x 1000 objects, 40032 bytes
---- activity_list_array 1 x 1000 objects, 40032 bytes
---- anl_clause_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
@ -110,8 +110,8 @@ Total memory consumption was 141982K = 139 MB
---- pcalc_prop_deferral 86 objects, 17888 bytes
---- to_phrase_request 63 objects, 17136 bytes
---- 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
---- match_avinue_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
@ -143,10 +143,10 @@ Total memory consumption was 141982K = 139 MB
---- parsing_pp_data 96 objects, 4608 bytes
---- command_line_switch 56 objects, 4480 bytes
---- semver_range 42 objects, 4368 bytes
---- method_set 136 objects, 4352 bytes
---- use_option 31 objects, 4216 bytes
---- method_set 131 objects, 4192 bytes
---- parse_node_annotation_type 124 objects, 3968 bytes
---- either_or_property_data 62 objects, 3968 bytes
---- parse_node_annotation_type 124 objects, 3968 bytes
---- definition 48 objects, 3456 bytes
---- property_setting_bp_data 86 objects, 3440 bytes
---- submodule_request 86 objects, 3440 bytes
@ -154,15 +154,15 @@ Total memory consumption was 141982K = 139 MB
---- target_vm 21 objects, 3024 bytes
---- JSON_type 39 objects, 2808 bytes
---- JSON_single_requirement 55 objects, 2640 bytes
---- part_of_inference_data 79 objects, 2528 bytes
---- parentage_inference_data 79 objects, 2528 bytes
---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes
---- part_of_inference_data 79 objects, 2528 bytes
---- kind_constructor_instance_rule_array 1 x 100 objects, 2432 bytes
---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes
---- equation_symbol 30 objects, 2400 bytes
---- scene 1 object, 2352 bytes
---- build_step 28 objects, 2016 bytes
---- pronoun_usage 42 objects, 1680 bytes
---- compiler_feature 30 objects, 1680 bytes
---- pronoun_usage 42 objects, 1680 bytes
---- table_contribution_array 1 x 100 objects, 1632 bytes
---- inform_pipeline 24 objects, 1536 bytes
---- inbuild_requirement 37 objects, 1480 bytes
@ -174,31 +174,31 @@ Total memory consumption was 141982K = 139 MB
---- table_column 16 objects, 1280 bytes
---- invocation_options_array 1 x 100 objects, 1224 bytes
---- direction_inference_data 30 objects, 1200 bytes
---- markdown_feature 25 objects, 1200 bytes
---- inbuild_search_result 29 objects, 1160 bytes
---- tree_inventory_item 28 objects, 1120 bytes
---- submodule_identity 34 objects, 1088 bytes
---- runtime_kind_structure 13 objects, 1040 bytes
---- quantifier 16 objects, 1024 bytes
---- web_md 7 objects, 1008 bytes
---- markdown_feature 20 objects, 960 bytes
---- pipeline_stage 20 objects, 960 bytes
---- named_rulebook_outcome 15 objects, 960 bytes
---- pipeline_stage 20 objects, 960 bytes
---- JSON_pair_requirement 29 objects, 928 bytes
---- control_structure_phrase 12 objects, 864 bytes
---- cached_understanding 21 objects, 840 bytes
---- kit_configuration 21 objects, 840 bytes
---- phrase_option_array 1 x 100 objects, 824 bytes
---- inform_kit 7 objects, 784 bytes
---- copy_error 7 objects, 784 bytes
---- inform_kit 7 objects, 784 bytes
---- internal_test 15 objects, 720 bytes
---- relation_guard 5 objects, 640 bytes
---- implication 13 objects, 624 bytes
---- chapter_md 7 objects, 616 bytes
---- code_generation 1 object, 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
---- module 7 objects, 560 bytes
---- inter_warehouse_room 10 objects, 560 bytes
---- inter_annotation_form 14 objects, 560 bytes
---- rulebook_outcome 17 objects, 544 bytes
---- small_word_set 11 objects, 528 bytes
---- equation 4 objects, 480 bytes
@ -207,7 +207,7 @@ Total memory consumption was 141982K = 139 MB
---- bp_family 14 objects, 448 bytes
---- source_file 5 objects, 440 bytes
---- inference_family 11 objects, 440 bytes
---- markdown_variation 3 objects, 384 bytes
---- markdown_variation 3 objects, 432 bytes
---- article_usage 8 objects, 384 bytes
---- grammatical_category 8 objects, 320 bytes
---- tree_inventory 1 object, 320 bytes
@ -256,9 +256,9 @@ Total memory consumption was 141982K = 139 MB
---- kind_template_definition 1 object, 40 bytes
---- by_function_bp_data 1 object, 40 bytes
100.0% was used for memory not allocated for objects:
99.9% was used for memory not allocated for objects:
62.9% text stream storage 91520104 bytes in 513407 claims
62.9% text stream storage 91601368 bytes in 513441 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
@ -276,5 +276,5 @@ Total memory consumption was 141982K = 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 - -195432240 bytes = -190851K = -186 MB
-134.-3% was overhead - -195438320 bytes = -190857K = -186 MB

View file

@ -1,21 +1,20 @@
100.0% in inform7 run
68.0% in compilation to Inter
45.7% in //Sequence::undertake_queued_tasks//
67.9% 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//
1.1% in //Sequence::lint_inter//
0.7% in //Sequence::undertake_queued_tasks//
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.3% in running Inter pipeline
5.4% not specifically accounted for
27.4% in running Inter pipeline
8.8% in step 14/15: generate inform6 -> auto.inf
6.9% in step 5/15: load-binary-kits
5.7% in step 6/15: make-synoptic-module
@ -24,6 +23,6 @@
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
2.4% not specifically accounted for
3.8% in supervisor
0.8% not specifically accounted for

View file

@ -43,6 +43,8 @@
--paste-background-colour: #f3f6fa;
--md-background-colour: #e3e6ea;
--example-label-colour: #E0FFFF;
--light-border-colour: #d0d7de;
}
@media (prefers-color-scheme: dark) {
@ -61,7 +63,7 @@
--index-dull-blue-colour: #4040c0;
--periodic-table-sidebar-colour: #555;
--periodic-table-sidebar-hover-colour: #222;
--leaders-background-colour: black;
--leaders-background-colour: #121212;
--library-card-title-colour: #a05050;
--library-card-other-colour: #505050;
--index-more-box-background-colour: #444444;
@ -90,6 +92,8 @@
--paste-background-colour: #090b0d;
--md-background-colour: #090b0d;
--example-label-colour: #FF2020;
--light-border-colour: #30373e;
}
}
@ -211,19 +215,6 @@ span.extensionindexerror {
color: #ff8080;
}
/* This is used in extension documentation, where an example is presented
in a slightly tinted box: */
table.extensionexample {
background-color: #f0f0f0;
}
span.extensionexampleletter {
color: #202020;
font-size: 14px;
font-weight: bold;
}
/* Seen in problem messages: */
span.problemred {
@ -557,8 +548,26 @@ button.dangerousbutton {
.markdowncontent em { font-style: italic; }
.markdowncontent strong { font-weight: bold; }
.markdowncontent code {
font-size: 85%;
.markdowncontent pre {
line-height: 16px;
}
.markdowncontent code.inlinesourcetext {
font-size: 90%;
background-color: var(--md-background-colour);
border-bottom-left-radius: 6px;
border-bottom-right-radius: 6px;
border-top-left-radius: 6px;
border-top-right-radius: 6px;
box-sizing: border-box;
padding-bottom: 2.38px;
padding-left: 4.76px;
padding-right: 4.76px;
padding-top: 2.38px;
white-space: break-spaces;
width: auto;
}
.markdowncontent code.inlinecode {
font-size: 90%;
font-family: SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
background-color: var(--md-background-colour);
border-bottom-left-radius: 6px;
@ -574,6 +583,40 @@ button.dangerousbutton {
width: auto;
}
.markdowncontent div.extract-transcript {
margin: 0.75em;
padding: 0.75em;
border: 1px dotted #2f6fab;
background-color: #f9e9e9;
}
.markdowncontent code.language-transcript {
font-family: "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif;
}
.markdowncontent div.definition {
margin: 0.75em;
padding: 0.75em;
border: 1px dashed #2f6fab;
background-color: #e9e9e9;
}
.markdowncontent div.definition p.defnprototype {
margin: 0;
padding: 0;
text-indent: 0;
}
.markdowncontent table {
border-spacing: 0;
border-collapse: collapse;
}
.markdowncontent table th, .markdowncontent table td {
padding: 4px 10px;
border: 1px solid var(--light-border-colour);
}
/* Used in syntax-colouring for extension documentation */
span.syntaxdefinition { color: var(--syntaxdefinition-colour); }
@ -598,6 +641,37 @@ span.documentationerror {
margin: 4px 2px;
}
/* For example box cues */
div.examplebox div.exampleleft {
float: left;
box-sizing: border-box;
width: 52px;
height: 30px;
padding: 8px 0;
}
div.examplebox div.exampleright {
margin-left: 60px;
box-sizing: border-box;
}
span.extensionexampleletter {
color: var(--heading-panel-text-colour);
font-size: 14px;
font-weight: bold;
background-color: var(--example-label-colour);
border-bottom-left-radius: 12px;
border-bottom-right-radius: 12px;
border-top-left-radius: 12px;
border-top-right-radius: 12px;
box-sizing: border-box;
padding-bottom: 4px;
padding-left: 20px;
padding-right: 20px;
padding-top: 4px;
width: auto;
}
/* New-style paste button */
a.pastelink {

View file

@ -474,6 +474,79 @@ button.dangerousbutton {
--paste-background-colour: #f3f6fa;
}
/* Used in rendering Markdown in extension documentation */
.markdowncontent em { font-style: italic; }
.markdowncontent strong { font-weight: bold; }
.markdowncontent pre {
line-height: 16px;
}
.markdowncontent code.inlinesourcetext {
font-size: 90%;
background-color: var(--md-background-colour);
border-bottom-left-radius: 6px;
border-bottom-right-radius: 6px;
border-top-left-radius: 6px;
border-top-right-radius: 6px;
box-sizing: border-box;
padding-bottom: 2.38px;
padding-left: 4.76px;
padding-right: 4.76px;
padding-top: 2.38px;
white-space: break-spaces;
width: auto;
}
.markdowncontent code.inlinecode {
font-size: 90%;
font-family: SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
background-color: var(--md-background-colour);
border-bottom-left-radius: 6px;
border-bottom-right-radius: 6px;
border-top-left-radius: 6px;
border-top-right-radius: 6px;
box-sizing: border-box;
padding-bottom: 2.38px;
padding-left: 4.76px;
padding-right: 4.76px;
padding-top: 2.38px;
white-space: break-spaces;
width: auto;
}
.markdowncontent div.extract-transcript {
margin: 0.75em;
padding: 0.75em;
border: 1px dotted #2f6fab;
background-color: #f9e9e9;
}
.markdowncontent code.language-transcript {
font-family: "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif;
}
.markdowncontent div.definition {
margin: 0.75em;
padding: 0.75em;
border: 1px dashed #2f6fab;
background-color: #e9e9e9;
}
.markdowncontent div.definition p.defnprototype {
margin: 0;
padding: 0;
text-indent: 0;
}
.markdowncontent table {
border-spacing: 0;
border-collapse: collapse;
}
.markdowncontent table th, .markdowncontent table td {
padding: 4px 10px;
border: 1px solid var(--light-border-colour);
}
/* Used in syntax-colouring for extension documentation */
span.syntaxdefinition { color: var(--syntaxdefinition-colour); }
@ -498,6 +571,37 @@ span.documentationerror {
margin: 4px 2px;
}
/* For example box cues */
div.examplebox div.exampleleft {
float: left;
box-sizing: border-box;
width: 52px;
height: 30px;
padding: 8px 0;
}
div.examplebox div.exampleright {
margin-left: 60px;
box-sizing: border-box;
}
span.extensionexampleletter {
color: var(--heading-panel-text-colour);
font-size: 14px;
font-weight: bold;
background-color: var(--example-label-colour);
border-bottom-left-radius: 12px;
border-bottom-right-radius: 12px;
border-top-left-radius: 12px;
border-top-right-radius: 12px;
box-sizing: border-box;
padding-bottom: 4px;
padding-left: 20px;
padding-right: 20px;
padding-top: 4px;
width: auto;
}
/* New-style paste button */
a.pastelink {

View file

@ -41,6 +41,10 @@
--paste-active-colour: #803030;
--paste-passive-colour: #303030;
--paste-background-colour: #f3f6fa;
--md-background-colour: #e3e6ea;
--example-label-colour: #E0FFFF;
--light-border-colour: #d0d7de;
}
@media (prefers-color-scheme: dark) {
@ -86,7 +90,11 @@
--paste-active-colour: #a05050;
--paste-passive-colour: #505050;
--paste-background-colour: #090b0d;
}
--md-background-colour: #090b0d;
--example-label-colour: #FF2020;
--light-border-colour: #30373e;
}
}
/* The default font (family) and size */
@ -207,19 +215,6 @@ span.extensionindexerror {
color: #ff8080;
}
/* This is used in extension documentation, where an example is presented
in a slightly tinted box: */
table.extensionexample {
background-color: #f0f0f0;
}
span.extensionexampleletter {
color: #202020;
font-size: 0.933rem; /* 14/12 * 100/125 */
font-weight: bold;
}
/* Seen in problem messages: */
span.problemred {
@ -549,6 +544,79 @@ button.dangerousbutton {
cursor: pointer;
}
/* Used in rendering Markdown in extension documentation */
.markdowncontent em { font-style: italic; }
.markdowncontent strong { font-weight: bold; }
.markdowncontent pre {
line-height: 16px;
}
.markdowncontent code.inlinesourcetext {
font-size: 90%;
background-color: var(--md-background-colour);
border-bottom-left-radius: 6px;
border-bottom-right-radius: 6px;
border-top-left-radius: 6px;
border-top-right-radius: 6px;
box-sizing: border-box;
padding-bottom: 2.38px;
padding-left: 4.76px;
padding-right: 4.76px;
padding-top: 2.38px;
white-space: break-spaces;
width: auto;
}
.markdowncontent code.inlinecode {
font-size: 90%;
font-family: SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
background-color: var(--md-background-colour);
border-bottom-left-radius: 6px;
border-bottom-right-radius: 6px;
border-top-left-radius: 6px;
border-top-right-radius: 6px;
box-sizing: border-box;
padding-bottom: 2.38px;
padding-left: 4.76px;
padding-right: 4.76px;
padding-top: 2.38px;
white-space: break-spaces;
width: auto;
}
.markdowncontent div.extract-transcript {
margin: 0.75em;
padding: 0.75em;
border: 1px dotted #2f6fab;
background-color: #f9e9e9;
}
.markdowncontent code.language-transcript {
font-family: "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif;
}
.markdowncontent div.definition {
margin: 0.75em;
padding: 0.75em;
border: 1px dashed #2f6fab;
background-color: #e9e9e9;
}
.markdowncontent div.definition p.defnprototype {
margin: 0;
padding: 0;
text-indent: 0;
}
.markdowncontent table {
border-spacing: 0;
border-collapse: collapse;
}
.markdowncontent table th, .markdowncontent table td {
padding: 4px 10px;
border: 1px solid var(--light-border-colour);
}
/* Used in syntax-colouring for extension documentation */
span.syntaxdefinition { color: var(--syntaxdefinition-colour); }
@ -573,6 +641,37 @@ span.documentationerror {
margin: 4px 2px;
}
/* For example box cues */
div.examplebox div.exampleleft {
float: left;
box-sizing: border-box;
width: 52px;
height: 30px;
padding: 8px 0;
}
div.examplebox div.exampleright {
margin-left: 60px;
box-sizing: border-box;
}
span.extensionexampleletter {
color: var(--heading-panel-text-colour);
font-size: 14px;
font-weight: bold;
background-color: var(--example-label-colour);
border-bottom-left-radius: 12px;
border-bottom-right-radius: 12px;
border-top-left-radius: 12px;
border-top-right-radius: 12px;
box-sizing: border-box;
padding-bottom: 4px;
padding-left: 20px;
padding-right: 20px;
padding-top: 4px;
width: auto;
}
/* New-style paste button */
a.pastelink {

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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