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

Progress towards extension pages

This commit is contained in:
Graham Nelson 2023-07-17 22:54:02 +01:00
parent ad2a8e18d8
commit 097d74b62d
86 changed files with 14751 additions and 12152 deletions

View file

@ -356,35 +356,21 @@ means they miss out on being classified at that time. When that happens, the
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3_1_5" class="paragraph-anchor"></a><b>&#167;3.1.5. </b><span class="extract"><span class="extract-syntax">TRACE_NT</span></span> nodes result from asterisked sentences; this is a debugging feature of
Inform. An asterisk on its own toggles logging of work on sentences. An asterisk
followed by double-quoted text is a note for the telemetry file.
Inform. An asterisk on its own toggles logging of work on sentences.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Pass through a TRACE node</span><span class="named-paragraph-number">3.1.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::length</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">telemetry_recording</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">telemetry_recording</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Telemetry::write_to_telemetry_file</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Lexer::word_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">))));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">telemetry_recording</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_TelemetryAccepted</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"that's a message for the Author, not me"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"so I'll note it down in the Telemetry file (if you're keeping one.)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">telemetry_recording</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tr</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">SyntaxTree::toggle_trace</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</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">pass_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">global_pass_state</span><span class="plain-syntax">.</span><span class="element-syntax">pass</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">0</span><span class="plain-syntax">: </span><span class="identifier-syntax">pass_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"Pre-Pass"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax">: </span><span class="identifier-syntax">pass_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"Pass 1"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax">: </span><span class="identifier-syntax">pass_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"Pass 2"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Log::tracing_on</span><span class="plain-syntax">(</span><span class="identifier-syntax">SyntaxTree::is_trace_set</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">()), </span><span class="identifier-syntax">pass_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SyntaxTree::toggle_trace</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</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">pass_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">global_pass_state</span><span class="plain-syntax">.</span><span class="element-syntax">pass</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">0</span><span class="plain-syntax">: </span><span class="identifier-syntax">pass_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"Pre-Pass"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax">: </span><span class="identifier-syntax">pass_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"Pass 1"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax">: </span><span class="identifier-syntax">pass_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"Pass 2"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Log::tracing_on</span><span class="plain-syntax">(</span><span class="identifier-syntax">SyntaxTree::is_trace_set</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">()), </span><span class="identifier-syntax">pass_name</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-ptmn.html#SP3_1">&#167;3.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>

View file

@ -186,7 +186,6 @@ how they have effect.)
<span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">BasicInformKit</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Use</span><span class="plain-syntax"> </span><span class="identifier-syntax">numbered</span><span class="plain-syntax"> </span><span class="identifier-syntax">rules</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">configuration</span><span class="plain-syntax"> </span><span class="identifier-syntax">flag</span><span class="plain-syntax"> </span><span class="identifier-syntax">NUMBERED_RULES</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">BasicInformKit</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Use</span><span class="plain-syntax"> </span><span class="identifier-syntax">telemetry</span><span class="plain-syntax"> </span><span class="identifier-syntax">recordings</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">compiler</span><span class="plain-syntax"> </span><span class="identifier-syntax">feature</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Use</span><span class="plain-syntax"> </span><span class="identifier-syntax">no</span><span class="plain-syntax"> </span><span class="identifier-syntax">deprecated</span><span class="plain-syntax"> </span><span class="identifier-syntax">features</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">configuration</span><span class="plain-syntax"> </span><span class="identifier-syntax">flag</span><span class="plain-syntax"> </span><span class="identifier-syntax">NO_DEPRECATED</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">BasicInformKit</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Use</span><span class="plain-syntax"> </span><span class="identifier-syntax">authorial</span><span class="plain-syntax"> </span><span class="identifier-syntax">modesty</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">configuration</span><span class="plain-syntax"> </span><span class="identifier-syntax">flag</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUTHORIAL_MODESTY</span>

View file

@ -77,7 +77,6 @@ meaningful only for works of IF and are inert for Basic Inform projects.
<span class="definition-keyword">enum</span> <span class="constant-syntax">MEMORY_ECONOMY_UO</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">NO_DEPRECATED_FEATURES_UO</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">NUMBERED_RULES_UO</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">TELEMETRY_RECORDING_UO</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">SCORING_UO</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">NO_SCORING_UO</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">ENGINEERING_NOTATION_UO</span>
@ -99,15 +98,14 @@ need to translate this to other languages.
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">memory</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">economy</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { MEMORY_ECONOMY_UO, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">no</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">deprecated</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">features</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { NO_DEPRECATED_FEATURES_UO, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">numbered</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rules</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { NUMBERED_RULES_UO, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">telemetry</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">recordings</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { TELEMETRY_RECORDING_UO, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">scoring</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { SCORING_UO, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">no</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">scoring</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { NO_SCORING_UO, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">engineering</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">notation</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { ENGINEERING_NOTATION_UO, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">unabbreviated</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">object</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">names</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { UNABBREVIATED_OBJECT_NAMES_UO, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">no</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">automatic</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">plural</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">synonyms</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { NO_AUTO_PLURAL_NAMES_UO, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">index</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">figure</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">thumbnails</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { INDEX_FIGURE_THUMBNAILS_UO, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">fast</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">route-finding</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { FAST_ROUTE_FINDING_UO, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">slow</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">route-finding</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { SLOW_ROUTE_FINDING_UO, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">fast</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">route-finding</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { FAST_ROUTE_FINDING_UO, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">slow</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">route-finding</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { SLOW_ROUTE_FINDING_UO, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">dictionary</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">resolution</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { DICTIONARY_RESOLUTION_UO, - }</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
@ -179,9 +177,8 @@ the above settings can be changed.)
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NO_SCORING_UO:</span><span class="plain-syntax"> </span><span class="identifier-syntax">g</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">scoring_option_set</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NUMBERED_RULES_UO:</span><span class="plain-syntax"> </span><span class="identifier-syntax">g</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">number_rules_in_index</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SCORING_UO:</span><span class="plain-syntax"> </span><span class="identifier-syntax">g</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">scoring_option_set</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TELEMETRY_RECORDING_UO:</span><span class="plain-syntax"> </span><span class="identifier-syntax">ProblemBuffer::set_telemetry</span><span class="plain-syntax">(); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">UNABBREVIATED_OBJECT_NAMES_UO:</span><span class="plain-syntax"> </span><span class="identifier-syntax">g</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">use_exact_parsing_option</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NO_AUTO_PLURAL_NAMES_UO:</span><span class="plain-syntax"> </span><span class="identifier-syntax">g</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">no_auto_plural_names</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NO_AUTO_PLURAL_NAMES_UO:</span><span class="plain-syntax"> </span><span class="identifier-syntax">g</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">no_auto_plural_names</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">FAST_ROUTE_FINDING_UO:</span><span class="plain-syntax"> </span><span class="identifier-syntax">g</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">fast_route_finding</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SLOW_ROUTE_FINDING_UO:</span><span class="plain-syntax"> </span><span class="identifier-syntax">g</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">slow_route_finding</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>

View file

@ -198,10 +198,7 @@ command line &mdash; deserves the truth.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">ProblemBuffer::redirect_problem_stream</span><span class="plain-syntax">(</span><span class="identifier-syntax">problems_file</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">problems_file</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ProblemBuffer::redirect_problem_stream</span><span class="plain-syntax">(</span><span class="identifier-syntax">problems_file</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Problems::warnings_occurred</span><span class="plain-syntax">()) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_begin</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><span class="string-syntax">"**"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
@ -217,21 +214,9 @@ command line &mdash; deserves the truth.
<span class="plain-syntax"> </span><span class="string-syntax">"brought up to date."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-up.html#SP5" class="function-link"><span class="function-syntax">UsingProblems::outcome_image_tail</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">problems_file</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">telemetry_recording</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Telemetry::ensure_telemetry_file</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ProblemBuffer::redirect_problem_stream</span><span class="plain-syntax">(</span><span class="identifier-syntax">telmy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_begin</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><span class="string-syntax">"**"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="string-syntax">"The %5-word source text has successfully been translated "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"into a world with %1 %2 and %3 %4, and the index has been "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"brought up to date."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</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">telmy</span><span class="plain-syntax">, </span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ProblemBuffer::redirect_problem_stream</span><span class="plain-syntax">(</span><span class="identifier-syntax">STDOUT</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">STDOUT</span><span class="plain-syntax">, </span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ProblemBuffer::redirect_problem_stream</span><span class="plain-syntax">(</span><span class="identifier-syntax">STDOUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_begin</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><span class="string-syntax">"**"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="string-syntax">"The %5-word source text has successfully been translated. "</span>
@ -241,9 +226,9 @@ command line &mdash; deserves the truth.
<span class="plain-syntax"> </span><span class="identifier-syntax">ProblemBuffer::redirect_problem_stream</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-pp.html#SP1" class="function-link"><span class="function-syntax">ProgressBar::final_state_of_progress_bar</span></a><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">STATUS</span><span class="plain-syntax"> = </span><a href="1-pp.html#SP2" class="function-link"><span class="function-syntax">ProgressBar::begin_outcome</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">STATUS</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">STATUS</span><span class="plain-syntax">, </span><span class="string-syntax">"Translation succeeded: %d room%s, %d thing%s"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="1-pp.html#SP2" class="function-link"><span class="function-syntax">ProgressBar::begin_outcome</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">OUT</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">"Translation succeeded: %d room%s, %d thing%s"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">rooms</span><span class="plain-syntax">, (</span><span class="identifier-syntax">rooms</span><span class="plain-syntax">==1)?</span><span class="string-syntax">""</span><span class="plain-syntax">:</span><span class="string-syntax">"s"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">things</span><span class="plain-syntax">, (</span><span class="identifier-syntax">things</span><span class="plain-syntax">==1)?</span><span class="string-syntax">""</span><span class="plain-syntax">:</span><span class="string-syntax">"s"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-pp.html#SP2" class="function-link"><span class="function-syntax">ProgressBar::end_outcome</span></a><span class="plain-syntax">();</span>

File diff suppressed because it is too large Load diff

View file

@ -78,14 +78,13 @@ but they're just plain old files, and are not managed by Inbuild as "copies".
<span class="definition-keyword">enum</span> <span class="constant-syntax">JAVASCRIPT_FOR_ONE_EXTENSION_IRES</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">CSS_SET_BY_PLATFORM_IRES</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">CSS_FOR_STANDARD_PAGES_IRES</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">EXTENSION_DOCUMENTATION_MODEL_IRES</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">RESOURCE_JSON_REQS_IRES</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">REGISTRY_JSON_REQS_IRES</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">INBUILD_JSON_REQS_IRES</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">UNICODE_DATA_IRES</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">InstalledFiles::filename</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">InstalledFiles::filename</span></span>:<br/><a href="2-if.html#SP3">&#167;3</a><br/>Inform Pages - <a href="2-ip.html#SP1">&#167;1</a><br/>Documentation References - <a href="2-dr2.html#SP3">&#167;3</a>, <a href="2-dr2.html#SP11_1">&#167;11.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ires</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">InstalledFiles::filename</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">InstalledFiles::filename</span></span>:<br/><a href="2-if.html#SP3">&#167;3</a><br/>Inform Pages - <a href="2-ip.html#SP1">&#167;1</a><br/>Documentation References - <a href="2-dr.html#SP3">&#167;3</a>, <a href="2-dr.html#SP11_1">&#167;11.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ires</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">internal</span><span class="plain-syntax"> = </span><span class="identifier-syntax">INSTALLED_FILES_HTML_CALLBACK</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">misc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">internal</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Miscellany"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">models</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">internal</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"HTML"</span><span class="plain-syntax">);</span>
@ -123,8 +122,6 @@ but they're just plain old files, and are not managed by Inbuild as "copies".
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-if.html#SP2" class="function-link"><span class="function-syntax">InstalledFiles::varied_by_platform</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">models</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"platform.css"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CSS_FOR_STANDARD_PAGES_IRES:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-if.html#SP2" class="function-link"><span class="function-syntax">InstalledFiles::varied_by_platform</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">models</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"main.css"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">EXTENSION_DOCUMENTATION_MODEL_IRES:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-if.html#SP2" class="function-link"><span class="function-syntax">InstalledFiles::varied_by_platform</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">models</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"extensionfile.html"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"unknown installation resource file"</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">NULL</span><span class="plain-syntax">;</span>
@ -176,9 +173,6 @@ if they would prefer that:
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CSS_FOR_STANDARD_PAGES_IRES:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-if.html#SP3" class="function-link"><span class="function-syntax">InstalledFiles::varied_by_named_platform</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">models</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"main.css"</span><span class="plain-syntax">, </span><span class="identifier-syntax">platform</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">EXTENSION_DOCUMENTATION_MODEL_IRES:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-if.html#SP3" class="function-link"><span class="function-syntax">InstalledFiles::varied_by_named_platform</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">models</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"extensionfile.html"</span><span class="plain-syntax">, </span><span class="identifier-syntax">platform</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-if.html#SP1" class="function-link"><span class="function-syntax">InstalledFiles::filename</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ires</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
@ -207,7 +201,7 @@ structure files, but in principle we allow a wider range of these to exist, so:
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-dr.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-hm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-ip.html">ip</a></li><li class="progresssection"><a href="2-sl.html">sl</a></li><li class="progresssection"><a href="2-pb.html">pb</a></li><li class="progresssection"><a href="2-dr.html">dr</a></li><li class="progresscurrent">if</li><li class="progresssection"><a href="2-dr2.html">dr2</a></li><li class="progresssection"><a href="2-lcl.html">lcl</a></li><li class="progressnext"><a href="2-dr2.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="2-pb.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-hm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-ip.html">ip</a></li><li class="progresssection"><a href="2-sl.html">sl</a></li><li class="progresssection"><a href="2-pb.html">pb</a></li><li class="progresscurrent">if</li><li class="progresssection"><a href="2-dr.html">dr</a></li><li class="progresssection"><a href="2-lcl.html">lcl</a></li><li class="progressnext"><a href="2-dr.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -77,7 +77,7 @@ depend on the use the page is being put to.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="1-hm.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-hm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresscurrent">ip</li><li class="progresssection"><a href="2-sl.html">sl</a></li><li class="progresssection"><a href="2-pb.html">pb</a></li><li class="progresssection"><a href="2-dr.html">dr</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-dr2.html">dr2</a></li><li class="progresssection"><a href="2-lcl.html">lcl</a></li><li class="progressnext"><a href="2-sl.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="1-hm.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-hm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresscurrent">ip</li><li class="progresssection"><a href="2-sl.html">sl</a></li><li class="progresssection"><a href="2-pb.html">pb</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-dr.html">dr</a></li><li class="progresssection"><a href="2-lcl.html">lcl</a></li><li class="progressnext"><a href="2-sl.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -459,7 +459,7 @@ included in localisation texts.
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">prototype</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">++));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Characters::isupper</span><span class="plain-syntax">(</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;nbsp;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-dr2.html#SP10" class="function-link"><span class="function-syntax">DocReferences::link</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">link</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-dr.html#SP10" class="function-link"><span class="function-syntax">DocReferences::link</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</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">else</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">"&lt;%S&gt;"</span><span class="plain-syntax">, </span><span class="identifier-syntax">link</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
@ -475,7 +475,7 @@ included in localisation texts.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-dr2.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-hm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-ip.html">ip</a></li><li class="progresssection"><a href="2-sl.html">sl</a></li><li class="progresssection"><a href="2-pb.html">pb</a></li><li class="progresssection"><a href="2-dr.html">dr</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-dr2.html">dr2</a></li><li class="progresscurrent">lcl</li><li class="progressnextoff">&#10095;</li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="2-dr.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-hm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-ip.html">ip</a></li><li class="progresssection"><a href="2-sl.html">sl</a></li><li class="progresssection"><a href="2-pb.html">pb</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-dr.html">dr</a></li><li class="progresscurrent">lcl</li><li class="progressnextoff">&#10095;</li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -139,7 +139,7 @@ to call a suitable function.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">PasteButtons::paste_W</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">PasteButtons::paste_W</span></span>:<br/>Documentation Renderer - <a href="2-dr.html#SP9_3_1">&#167;9.3.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">PasteButtons::paste_W</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-pb.html#SP3" class="function-link"><span class="function-syntax">PasteButtons::paste_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">), </span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">PasteButtons::paste_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">alt_stream</span><span class="plain-syntax">) {</span>
@ -164,7 +164,7 @@ The conversion to UTF-8 is performed in <span class="extract"><span class="extra
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">PasteButtons::argument</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">PasteButtons::argument</span></span>:<br/><a href="2-pb.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">alt_stream</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">PasteButtons::argument</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">PasteButtons::argument</span></span>:<br/><a href="2-pb.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">alt_stream</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"'"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">alt_stream</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">alt_stream</span><span class="plain-syntax">)</span>
@ -292,7 +292,7 @@ filing system.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-sl.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-hm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-ip.html">ip</a></li><li class="progresssection"><a href="2-sl.html">sl</a></li><li class="progresscurrent">pb</li><li class="progresssection"><a href="2-dr.html">dr</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-dr2.html">dr2</a></li><li class="progresssection"><a href="2-lcl.html">lcl</a></li><li class="progressnext"><a href="2-dr.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="2-sl.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-hm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-ip.html">ip</a></li><li class="progresssection"><a href="2-sl.html">sl</a></li><li class="progresscurrent">pb</li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-dr.html">dr</a></li><li class="progresssection"><a href="2-lcl.html">lcl</a></li><li class="progressnext"><a href="2-if.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -143,7 +143,7 @@ is the only place in Inform where <span class="extract"><span class="extract-syn
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-sl.html#SP2">&#167;2</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-ip.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-hm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-ip.html">ip</a></li><li class="progresscurrent">sl</li><li class="progresssection"><a href="2-pb.html">pb</a></li><li class="progresssection"><a href="2-dr.html">dr</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-dr2.html">dr2</a></li><li class="progresssection"><a href="2-lcl.html">lcl</a></li><li class="progressnext"><a href="2-pb.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="2-ip.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-hm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-ip.html">ip</a></li><li class="progresscurrent">sl</li><li class="progresssection"><a href="2-pb.html">pb</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-dr.html">dr</a></li><li class="progresssection"><a href="2-lcl.html">lcl</a></li><li class="progressnext"><a href="2-pb.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -77,17 +77,13 @@ code is general-purpose.
<p class="commentary">By contrast, the <a href="index.html" class="internal">html</a> module is very much a part of the Inform compiler
and provides highly Inform-specific functions needed to make the intranet-like
miniature websites it generates on the fly &mdash; problem pages, the Index, the
extensions documentation.
extensions documentation. In particular, it offers:
</p>
<ul class="items"><li>(a) clickable links to positions in source text, opening the Source panel
in the Inform GUI apps as needed &mdash; see <a href="2-sl.html#SP2" class="internal">SourceLinks::link</a>;
</li><li>(b) paste buttons which, when clicked, insert text into the Source panel,
or which open certain files or folders &mdash; see <a href="2-pb.html" class="internal">Paste Buttons</a>;
</li><li>(c) renders Inform extension documentation text to HTML &mdash; see
<a href="2-dr.html#SP9" class="internal">DocumentationRenderer::set_body_text</a> for the body of an extension or of one
of its examples, and <a href="2-dr.html#SP7" class="internal">DocumentationRenderer::table_of_contents</a> for the TOC at
the top.
</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. Custom HTML link protocols. </b>This seems a useful place to document something which the Inform GUI apps
must provide. These render index, problem and extension mini-website pages

View file

@ -96,18 +96,13 @@
<spon class="sectiontitle">Paste Buttons</span></a> -
<span class="sectionpurpose">HTML for a button which, when clicked, pastes Inform source text into the Source panel of the application, or opens a file or folder on the host computer.</span></p>
</li>
<li>
<p class="sectionentry"><a href="2-dr.html">
<spon class="sectiontitle">Documentation Renderer</span></a> -
<span class="sectionpurpose">To render a passage of extension documentation as HTML.</span></p>
</li>
<li>
<p class="sectionentry"><a href="2-if.html">
<spon class="sectiontitle">Installed Files</span></a> -
<span class="sectionpurpose">Filenames for a few unmanaged files included in a standard Inform installation.</span></p>
</li>
<li>
<p class="sectionentry"><a href="2-dr2.html">
<p class="sectionentry"><a href="2-dr.html">
<spon class="sectiontitle">Documentation References</span></a> -
<span class="sectionpurpose">To enable index or results pages to link into documentation.</span></p>
</li>

View file

@ -183,7 +183,7 @@ error in this case.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="../supervisor-module/1-ic.html#SP12" class="function-link"><span class="function-syntax">Supervisor::go_operational</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="../supervisor-module/7-tr.html#SP2" class="function-link"><span class="function-syntax">InbuildReport::install</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">to_install</span><span class="plain-syntax">, </span><span class="identifier-syntax">confirmed</span><span class="plain-syntax">, </span><span class="identifier-syntax">path_to_inbuild</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../supervisor-module/7-ti.html#SP2" class="function-link"><span class="function-syntax">ExtensionInstaller::install</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">to_install</span><span class="plain-syntax">, </span><span class="identifier-syntax">confirmed</span><span class="plain-syntax">, </span><span class="identifier-syntax">path_to_inbuild</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="1-mn.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_4" class="paragraph-anchor"></a><b>&#167;2.4. </b>We make the function call <span class="extract"><span class="extract-syntax">Supervisor::go_operational</span></span> to signal to <span class="extract"><span class="extract-syntax">inbuild</span></span>
@ -615,7 +615,7 @@ other options to the selection defined here.
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">REPAIR_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">repair_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">val</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">INSTALL_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">to_install</span><span class="plain-syntax"> = </span><a href="1-mn.html#SP2_8" class="function-link"><span class="function-syntax">Main::file_or_path_to_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">, </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">RESULTS_CLSW:</span><span class="plain-syntax"> </span><a href="../supervisor-module/7-tr.html#SP1" class="function-link"><span class="function-syntax">InbuildReport::set_filename</span></a><span class="plain-syntax">(</span><a href="../../../inweb/foundation-module/3-fln.html#SP3" class="function-link"><span class="function-syntax">Filenames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">)); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">RESULTS_CLSW:</span><span class="plain-syntax"> </span><a href="../supervisor-module/7-ti.html#SP1" class="function-link"><span class="function-syntax">ExtensionInstaller::set_filename</span></a><span class="plain-syntax">(</span><a href="../../../inweb/foundation-module/3-fln.html#SP3" class="function-link"><span class="function-syntax">Filenames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">)); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONFIRMED_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">confirmed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">val</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">VERBOSE_CLSW:</span><span class="plain-syntax"> </span><a href="../supervisor-module/1-ic.html#SP2" class="function-link"><span class="function-syntax">Supervisor::set_verbosity</span></a><span class="plain-syntax">(1); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">VERBOSITY_CLSW:</span><span class="plain-syntax"> </span><a href="../supervisor-module/1-ic.html#SP2" class="function-link"><span class="function-syntax">Supervisor::set_verbosity</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>

View file

@ -172,7 +172,7 @@ the source text in the application.
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. Links to documentation. </b>These produce little blue help icons which, when clicked, show the relevant
page of documentation in the Inform app. Cross-referencing is via the
system set up in <a href="../html-module/2-dr2.html" class="internal">Documentation References (in html)</a>.
system set up in <a href="../html-module/2-dr.html" class="internal">Documentation References (in html)</a>.
</p>
<pre class="displayed-code all-displayed-code code-font">

View file

@ -104,14 +104,13 @@ equivalent of unlocking the doors and turning the lights on in the morning.
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-mn.html#SP2_2" class="named-paragraph-link"><span class="named-paragraph">Find the project identified for us by Inbuild</span><span class="named-paragraph-number">2.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-mn.html#SP2_3" class="named-paragraph-link"><span class="named-paragraph">Open the debugging log and the problems report</span><span class="named-paragraph-number">2.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-mn.html#SP2_4" class="named-paragraph-link"><span class="named-paragraph">Name the telemetry</span><span class="named-paragraph-number">2.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-mn.html#SP2_5" class="named-paragraph-link"><span class="named-paragraph">Build the project</span><span class="named-paragraph-number">2.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-mn.html#SP2_4" class="named-paragraph-link"><span class="named-paragraph">Build the project</span><span class="named-paragraph-number">2.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-mn.html#SP2_6" class="named-paragraph-link"><span class="named-paragraph">Post mortem logging</span><span class="named-paragraph-number">2.6</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">proceed</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="1-mn.html#SP2_7" class="named-paragraph-link"><span class="named-paragraph">Shutdown and rennab</span><span class="named-paragraph-number">2.7</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-mn.html#SP2_5" class="named-paragraph-link"><span class="named-paragraph">Post mortem logging</span><span class="named-paragraph-number">2.5</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">proceed</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="1-mn.html#SP2_6" class="named-paragraph-link"><span class="named-paragraph">Shutdown and rennab</span><span class="named-paragraph-number">2.6</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">problem_count</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><a href="../problems-module/2-pl0.html#SP1" class="function-link"><span class="function-syntax">ProblemSigils::exit</span></a><span class="plain-syntax">(1);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-mn.html#SP2_8" class="named-paragraph-link"><span class="named-paragraph">Shut down the modules</span><span class="named-paragraph-number">2.8</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-mn.html#SP2_7" class="named-paragraph-link"><span class="named-paragraph">Shut down the modules</span><span class="named-paragraph-number">2.7</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -226,41 +225,13 @@ but we won't assume that. Remember, <a href="../supervisor-module/index.html" cl
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="1-mn.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_4" class="paragraph-anchor"></a><b>&#167;2.4. </b>Telemetry is not as sinister as it sounds: the app isn't sending data out
on the Internet, only (if requested) logging what it's doing to a local file.
This was provided for classroom use, so that teachers can see what their
students have been getting stuck on. In any case, it needs to be activated
with a use option, so by default this file will never be written.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Name the telemetry</span><span class="named-paragraph-number">2.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax"> = </span><a href="../supervisor-module/1-ic.html#SP19" class="function-link"><span class="function-syntax">Supervisor::transient</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">T</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-pth.html#SP4" class="function-link"><span class="function-syntax">Pathnames::down</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Telemetry"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../../../inweb/foundation-module/3-pth.html#SP9" class="function-link"><span class="function-syntax">Pathnames::create_in_file_system</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</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">leafname_of_telemetry</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">this_month</span><span class="plain-syntax"> = </span><span class="identifier-syntax">the_present</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tm_mon</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">this_day</span><span class="plain-syntax"> = </span><span class="identifier-syntax">the_present</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tm_mday</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">this_year</span><span class="plain-syntax"> = </span><span class="identifier-syntax">the_present</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tm_year</span><span class="plain-syntax"> + </span><span class="constant-syntax">1900</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">leafname_of_telemetry</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"Telemetry %04d-%02d-%02d.txt"</span><span class="plain-syntax">, </span><span class="identifier-syntax">this_year</span><span class="plain-syntax">, </span><span class="identifier-syntax">this_month</span><span class="plain-syntax">, </span><span class="identifier-syntax">this_day</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-fln.html#SP2" class="function-link"><span class="function-syntax">Filenames::in</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">leafname_of_telemetry</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../problems-module/1-tlm.html#SP1" class="function-link"><span class="function-syntax">Telemetry::locate_telemetry_file</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">F</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">leafname_of_telemetry</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="1-mn.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_5" class="paragraph-anchor"></a><b>&#167;2.5. </b>The compiler is now ready for use. We ask <a href="../supervisor-module/index.html" class="internal">supervisor</a> to go ahead and
<p class="commentary firstcommentary"><a id="SP2_4" class="paragraph-anchor"></a><b>&#167;2.4. </b>The compiler is now ready for use. We ask <a href="../supervisor-module/index.html" class="internal">supervisor</a> to go ahead and
build that project: it will incrementally build some of the resources needed,
if any of them are, and then call upon <a href="../core-module/index.html" class="internal">core</a> to perform the actual
compilation.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Build the project</span><span class="named-paragraph-number">2.5</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Build the project</span><span class="named-paragraph-number">2.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -272,11 +243,11 @@ compilation.
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="1-mn.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_6" class="paragraph-anchor"></a><b>&#167;2.6. </b>Diagnostics files fall into the category of "be careful what you wish for";
<p class="commentary firstcommentary"><a id="SP2_5" class="paragraph-anchor"></a><b>&#167;2.5. </b>Diagnostics files fall into the category of "be careful what you wish for";
they can be rather lengthy.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Post mortem logging</span><span class="named-paragraph-number">2.6</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Post mortem logging</span><span class="named-paragraph-number">2.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -294,7 +265,7 @@ they can be rather lengthy.
<span class="plain-syntax"> </span><a href="1-mn.html#SP3" class="function-link"><span class="function-syntax">Main::write_diagnostics</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"preform-summary.txt"</span><span class="plain-syntax">, &amp;</span><a href="1-mn.html#SP3" class="function-link"><span class="function-syntax">Main::log_preform_summary</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-mn.html#SP3" class="function-link"><span class="function-syntax">Main::write_diagnostics</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"documentation-diagnostics.txt"</span><span class="plain-syntax">, &amp;</span><a href="../html-module/2-dr2.html#SP9" class="function-link"><span class="function-syntax">DocReferences::log_statistics</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"documentation-diagnostics.txt"</span><span class="plain-syntax">, &amp;</span><a href="../html-module/2-dr.html#SP9" class="function-link"><span class="function-syntax">DocReferences::log_statistics</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-mn.html#SP3" class="function-link"><span class="function-syntax">Main::write_diagnostics</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"verbs-diagnostics.txt"</span><span class="plain-syntax">, &amp;</span><a href="../linguistics-module/3-vu.html#SP2" class="function-link"><span class="function-syntax">VerbUsages::log_all</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-mn.html#SP3" class="function-link"><span class="function-syntax">Main::write_diagnostics</span></a><span class="plain-syntax">(</span>
@ -304,7 +275,7 @@ they can be rather lengthy.
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="1-mn.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_7" class="paragraph-anchor"></a><b>&#167;2.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Shutdown and rennab</span><span class="named-paragraph-number">2.7</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP2_6" class="paragraph-anchor"></a><b>&#167;2.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Shutdown and rennab</span><span class="named-paragraph-number">2.6</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -316,7 +287,7 @@ they can be rather lengthy.
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="1-mn.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_8" class="paragraph-anchor"></a><b>&#167;2.8. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Shut down the modules</span><span class="named-paragraph-number">2.8</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP2_7" class="paragraph-anchor"></a><b>&#167;2.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Shut down the modules</span><span class="named-paragraph-number">2.7</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -350,7 +321,7 @@ they can be rather lengthy.
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Main::write_diagnostics</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Main::write_diagnostics</span></span>:<br/><a href="1-mn.html#SP2_6">&#167;2.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">leafname</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">write_fn</span><span class="plain-syntax">)(</span><span class="reserved-syntax">void</span><span class="plain-syntax">)) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Main::write_diagnostics</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Main::write_diagnostics</span></span>:<br/><a href="1-mn.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">leafname</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">write_fn</span><span class="plain-syntax">)(</span><span class="reserved-syntax">void</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-fln.html#SP2" class="function-link"><span class="function-syntax">Filenames::in</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">diagnostics_path</span><span class="plain-syntax">, </span><span class="identifier-syntax">leafname</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> </span><span class="identifier-syntax">diagnostics_file</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">STREAM_OPEN_TO_FILE</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">diagnostics_file</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="constant-syntax">ISO_ENC</span><span class="plain-syntax">) == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">)</span>
@ -363,15 +334,15 @@ they can be rather lengthy.
<span class="plain-syntax"> </span><span class="identifier-syntax">STREAM_CLOSE</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">diagnostics_file</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Main::log_task_syntax_tree</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">Main::log_task_syntax_tree</span></span>:<br/><a href="1-mn.html#SP2_6">&#167;2.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Main::log_task_syntax_tree</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">Main::log_task_syntax_tree</span></span>:<br/><a href="1-mn.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="../syntax-module/2-pn.html#SP16" class="function-link"><span class="function-syntax">Node::log_tree</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">DL</span><span class="plain-syntax">, </span><a href="../core-module/1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">()-&gt;</span><span class="element-syntax">root_node</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Main::log_preform_summary</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Main::log_preform_summary</span></span>:<br/><a href="1-mn.html#SP2_6">&#167;2.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Main::log_preform_summary</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Main::log_preform_summary</span></span>:<br/><a href="1-mn.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="../words-module/4-ins.html#SP8" class="function-link"><span class="function-syntax">Instrumentation::log_nt</span></a><span class="plain-syntax">(</span><span class="function-syntax">&lt;s-literal&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Main::log_task_syntax_summary</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">Main::log_task_syntax_summary</span></span>:<br/><a href="1-mn.html#SP2_6">&#167;2.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Main::log_task_syntax_summary</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">Main::log_task_syntax_summary</span></span>:<br/><a href="1-mn.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="../syntax-module/2-pn.html#SP16" class="function-link"><span class="function-syntax">Node::summarise_tree</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">DL</span><span class="plain-syntax">, </span><a href="../core-module/1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">()-&gt;</span><span class="element-syntax">root_node</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>

View file

@ -70,34 +70,34 @@ which take more than 1/1000th of the total running time.
<pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">100.0% in inform7 run</span>
<span class="plain-syntax"> 66.4% in compilation to Inter</span>
<span class="plain-syntax"> 44.1% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 4.9% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pre_pass</a>
<span class="plain-syntax"> 3.3% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_1</a>
<span class="plain-syntax"> 1.8% in </span><a href="../assertions-module/5-id.html#SP4" class="internal">ImperativeDefinitions::assess_all</a>
<span class="plain-syntax"> 1.8% in </span><a href="../runtime-module/6-pi.html#SP1" class="internal">RTPhrasebook::compile_entries</a>
<span class="plain-syntax"> 67.9% in compilation to Inter</span>
<span class="plain-syntax"> 45.8% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 4.5% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pre_pass</a>
<span class="plain-syntax"> 3.8% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_1</a>
<span class="plain-syntax"> 1.9% in </span><a href="../assertions-module/5-id.html#SP4" class="internal">ImperativeDefinitions::assess_all</a>
<span class="plain-syntax"> 1.9% in </span><a href="../runtime-module/6-pi.html#SP1" class="internal">RTPhrasebook::compile_entries</a>
<span class="plain-syntax"> 1.5% in </span><a href="../runtime-module/5-kc.html#SP32" class="internal">RTKindConstructors::compile</a>
<span class="plain-syntax"> 1.1% in </span><a href="../core-module/1-htc.html#SP12" class="internal">Sequence::lint_inter</a>
<span class="plain-syntax"> 0.7% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 0.3% in </span><a href="../runtime-module/3-cm.html#SP1" class="internal">CompletionModule::compile</a>
<span class="plain-syntax"> 0.3% in </span><a href="../assertions-module/5-id.html#SP5" class="internal">ImperativeDefinitions::compile_first_block</a>
<span class="plain-syntax"> 0.3% in </span><a href="../knowledge-module/4-is.html#SP27" class="internal">InferenceSubjects::emit_all</a>
<span class="plain-syntax"> 0.3% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_2</a>
<span class="plain-syntax"> 0.3% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 0.3% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 0.3% in </span><a href="../knowledge-module/5-tmw.html#SP5" class="internal">World::stage_V</a>
<span class="plain-syntax"> 4.9% not specifically accounted for</span>
<span class="plain-syntax"> 29.0% in running Inter pipeline</span>
<span class="plain-syntax"> 10.1% in step 14/15: generate inform6 -&gt; auto.inf</span>
<span class="plain-syntax"> 7.1% in step 5/15: load-binary-kits</span>
<span class="plain-syntax"> 6.0% in step 6/15: make-synoptic-module</span>
<span class="plain-syntax"> 1.8% in step 9/15: make-identifiers-unique</span>
<span class="plain-syntax"> 4.2% not specifically accounted for</span>
<span class="plain-syntax"> 27.8% in running Inter pipeline</span>
<span class="plain-syntax"> 9.5% in step 14/15: generate inform6 -&gt; auto.inf</span>
<span class="plain-syntax"> 6.8% in step 5/15: load-binary-kits</span>
<span class="plain-syntax"> 6.1% in step 6/15: make-synoptic-module</span>
<span class="plain-syntax"> 1.9% in step 9/15: make-identifiers-unique</span>
<span class="plain-syntax"> 0.3% in step 12/15: eliminate-redundant-operations</span>
<span class="plain-syntax"> 0.3% in step 4/15: compile-splats</span>
<span class="plain-syntax"> 0.3% in step 7/15: shorten-wiring</span>
<span class="plain-syntax"> 0.3% in step 8/15: detect-indirect-calls</span>
<span class="plain-syntax"> 2.3% not specifically accounted for</span>
<span class="plain-syntax"> 3.3% in supervisor</span>
<span class="plain-syntax"> 1.2% not specifically accounted for</span>
<span class="plain-syntax"> 1.9% not specifically accounted for</span>
<span class="plain-syntax"> 3.4% in supervisor</span>
<span class="plain-syntax"> 0.8% not specifically accounted for</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. Memory consumption. </b>The following gives some idea of which classes of object have the most
instances, and also of how Inform's memory tends to be used in practice.
@ -106,77 +106,77 @@ represent less than 1/1000th of the total.
</p>
<pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">Total memory consumption was 138172K = 135 MB</span>
<span class="plain-syntax">Total memory consumption was 138473K = 135 MB</span>
<span class="plain-syntax"> ---- was used for 2113736 objects, in 374136 frames in 0 x 800K = 0K = 0 MB:</span>
<span class="plain-syntax"> ---- was used for 2115566 objects, in 374745 frames in 0 x 800K = 0K = 0 MB:</span>
<span class="plain-syntax"> 30.5% inter_tree_node_array 60 x 8192 = 491520 objects, 43255680 bytes</span>
<span class="plain-syntax"> 19.1% text_stream_array 4812 x 100 = 481200 objects, 27101184 bytes</span>
<span class="plain-syntax"> 17.9% linked_list 45303 objects, 25369680 bytes</span>
<span class="plain-syntax"> 19.1% text_stream_array 4815 x 100 = 481500 objects, 27118080 bytes</span>
<span class="plain-syntax"> 17.9% linked_list 45341 objects, 25390960 bytes</span>
<span class="plain-syntax"> 10.1% inter_symbol_array 135 x 1024 = 138240 objects, 14381280 bytes</span>
<span class="plain-syntax"> 9.8% inter_error_stash_array 106 x 1024 = 108544 objects, 13897024 bytes</span>
<span class="plain-syntax"> 7.5% parse_node 133610 objects, 10688800 bytes</span>
<span class="plain-syntax"> 9.8% inter_error_stash_array 107 x 1024 = 109568 objects, 14028128 bytes</span>
<span class="plain-syntax"> 7.5% parse_node 133764 objects, 10701120 bytes</span>
<span class="plain-syntax"> 5.3% verb_conjugation 164 objects, 7610912 bytes</span>
<span class="plain-syntax"> 4.0% parse_node_annotation_array 357 x 500 = 178500 objects, 5723424 bytes</span>
<span class="plain-syntax"> 3.1% scan_directory 1090 objects, 4499520 bytes</span>
<span class="plain-syntax"> 2.4% pcalc_prop_array 26 x 1000 = 26000 objects, 3536832 bytes</span>
<span class="plain-syntax"> 2.2% inter_name_array 67 x 1000 = 67000 objects, 3218144 bytes</span>
<span class="plain-syntax"> 1.9% kind_array 68 x 1000 = 68000 objects, 2722176 bytes</span>
<span class="plain-syntax"> 1.5% inter_schema_token 14185 objects, 2156120 bytes</span>
<span class="plain-syntax"> 1.5% inter_schema_token 14176 objects, 2154752 bytes</span>
<span class="plain-syntax"> 1.4% inter_name_generator_array 51 x 1000 = 51000 objects, 2041632 bytes</span>
<span class="plain-syntax"> 1.3% package_request 21315 objects, 1875720 bytes</span>
<span class="plain-syntax"> 1.3% vocabulary_entry_array 165 x 100 = 16500 objects, 1853280 bytes</span>
<span class="plain-syntax"> 1.1% dict_entry_array 483 x 100 = 48300 objects, 1561056 bytes</span>
<span class="plain-syntax"> 1.0% inter_symbols_table 26897 objects, 1506232 bytes</span>
<span class="plain-syntax"> 1.3% package_request 21340 objects, 1877920 bytes</span>
<span class="plain-syntax"> 1.2% vocabulary_entry_array 163 x 100 = 16300 objects, 1830816 bytes</span>
<span class="plain-syntax"> 1.1% dict_entry_array 484 x 100 = 48400 objects, 1564288 bytes</span>
<span class="plain-syntax"> 1.0% inter_symbols_table 26913 objects, 1507128 bytes</span>
<span class="plain-syntax"> 1.0% match_trie_array 11 x 1000 = 11000 objects, 1496352 bytes</span>
<span class="plain-syntax"> 1.0% i6_schema_array 24 x 100 = 2400 objects, 1440768 bytes</span>
<span class="plain-syntax"> 0.9% inter_package 26897 objects, 1291056 bytes</span>
<span class="plain-syntax"> 0.9% inter_package 26913 objects, 1291824 bytes</span>
<span class="plain-syntax"> 0.8% map_data 677 objects, 1137360 bytes</span>
<span class="plain-syntax"> 0.7% id_body 964 objects, 1102816 bytes</span>
<span class="plain-syntax"> 0.7% id_body 977 objects, 1117688 bytes</span>
<span class="plain-syntax"> 0.7% adjective_meaning 208 objects, 1030016 bytes</span>
<span class="plain-syntax"> 0.7% inter_schema_node 9070 objects, 1015840 bytes</span>
<span class="plain-syntax"> 0.6% excerpt_meaning 3143 objects, 980616 bytes</span>
<span class="plain-syntax"> 0.6% production 3995 objects, 926840 bytes</span>
<span class="plain-syntax"> 0.6% ptoken 8687 objects, 903448 bytes</span>
<span class="plain-syntax"> 0.6% grammatical_usage 3649 objects, 875760 bytes</span>
<span class="plain-syntax"> 0.6% individual_form 2582 objects, 867552 bytes</span>
<span class="plain-syntax"> 0.7% inter_schema_node 9066 objects, 1015392 bytes</span>
<span class="plain-syntax"> 0.6% excerpt_meaning 3162 objects, 986544 bytes</span>
<span class="plain-syntax"> 0.6% production 3985 objects, 924520 bytes</span>
<span class="plain-syntax"> 0.6% ptoken 8652 objects, 899808 bytes</span>
<span class="plain-syntax"> 0.6% grammatical_usage 3648 objects, 875520 bytes</span>
<span class="plain-syntax"> 0.6% individual_form 2581 objects, 867216 bytes</span>
<span class="plain-syntax"> 0.4% unary_predicate_array 17 x 1000 = 17000 objects, 680544 bytes</span>
<span class="plain-syntax"> 0.3% local_variable_array 49 x 100 = 4900 objects, 471968 bytes</span>
<span class="plain-syntax"> 0.2% verb_usage 1148 objects, 394912 bytes</span>
<span class="plain-syntax"> 0.2% rule 478 objects, 374752 bytes</span>
<span class="plain-syntax"> 0.2% dictionary 7751 objects, 372048 bytes</span>
<span class="plain-syntax"> 0.2% verb_form 388 objects, 350752 bytes</span>
<span class="plain-syntax"> 0.2% noun 2396 objects, 287520 bytes</span>
<span class="plain-syntax"> 0.2% noun 2395 objects, 287400 bytes</span>
<span class="plain-syntax"> 0.1% compilation_subtask 3388 objects, 271040 bytes</span>
<span class="plain-syntax"> 0.1% inference_subject 672 objects, 263424 bytes</span>
<span class="plain-syntax"> 0.1% inter_annotation_array 2 x 8192 = 16384 objects, 262208 bytes</span>
<span class="plain-syntax"> 0.1% vanilla_function 3805 objects, 243520 bytes</span>
<span class="plain-syntax"> 0.1% vanilla_function 3807 objects, 243648 bytes</span>
<span class="plain-syntax"> 0.1% binary_predicate 330 objects, 174240 bytes</span>
<span class="plain-syntax"> 0.1% hierarchy_location 1188 objects, 171072 bytes</span>
<span class="plain-syntax"> 0.1% linguistic_stock_item 3339 objects, 160272 bytes</span>
<span class="plain-syntax"> 0.1% hierarchy_location 1189 objects, 171216 bytes</span>
<span class="plain-syntax"> 0.1% linguistic_stock_item 3338 objects, 160224 bytes</span>
<span class="plain-syntax"> 0.1% rule_family_data 404 objects, 148672 bytes</span>
<span class="plain-syntax"> 0.1% nonterminal 776 objects, 142784 bytes</span>
<span class="plain-syntax"> 0.1% nonterminal 773 objects, 142232 bytes</span>
<span class="plain-syntax"> ---- nascent_array 2130 objects, 136320 bytes</span>
<span class="plain-syntax"> ---- inference 1705 objects, 122760 bytes</span>
<span class="plain-syntax"> ---- pcalc_term_array 3 x 1000 = 3000 objects, 120096 bytes</span>
<span class="plain-syntax"> ---- documentation_ref 1276 objects, 112288 bytes</span>
<span class="plain-syntax"> ---- inter_schema 1543 objects, 111096 bytes</span>
<span class="plain-syntax"> ---- imperative_defn 1402 objects, 100944 bytes</span>
<span class="plain-syntax"> ---- noun_usage 2420 objects, 96800 bytes</span>
<span class="plain-syntax"> ---- inter_schema 1542 objects, 111024 bytes</span>
<span class="plain-syntax"> ---- imperative_defn 1415 objects, 101880 bytes</span>
<span class="plain-syntax"> ---- noun_usage 2419 objects, 96760 bytes</span>
<span class="plain-syntax"> ---- anl_entry_array 2 x 1000 = 2000 objects, 96064 bytes</span>
<span class="plain-syntax"> ---- inter_tree 7 objects, 95760 bytes</span>
<span class="plain-syntax"> ---- inter_tree 7 objects, 95872 bytes</span>
<span class="plain-syntax"> ---- preposition 274 objects, 87680 bytes</span>
<span class="plain-syntax"> ---- lexical_cluster 2536 objects, 81152 bytes</span>
<span class="plain-syntax"> ---- kind_variable_declaration 1656 objects, 79488 bytes</span>
<span class="plain-syntax"> ---- lexical_cluster 2535 objects, 81120 bytes</span>
<span class="plain-syntax"> ---- kind_variable_declaration 1659 objects, 79632 bytes</span>
<span class="plain-syntax"> ---- rulebook 407 objects, 78144 bytes</span>
<span class="plain-syntax"> ---- label_namespace 1480 objects, 71040 bytes</span>
<span class="plain-syntax"> ---- spatial_data 677 objects, 64992 bytes</span>
<span class="plain-syntax"> ---- kind_constructor 79 objects, 64464 bytes</span>
<span class="plain-syntax"> ---- linked_list_item_array 4 x 1000 = 4000 objects, 64128 bytes</span>
<span class="plain-syntax"> ---- actions_rcd_data 1954 objects, 62528 bytes</span>
<span class="plain-syntax"> ---- scenes_rcd_data 1954 objects, 62528 bytes</span>
<span class="plain-syntax"> ---- booking 868 objects, 62496 bytes</span>
<span class="plain-syntax"> ---- kind_macro_definition 9 objects, 62280 bytes</span>
<span class="plain-syntax"> ---- actions_rcd_data 1928 objects, 61696 bytes</span>
<span class="plain-syntax"> ---- scenes_rcd_data 1928 objects, 61696 bytes</span>
<span class="plain-syntax"> ---- command_grammar 130 objects, 58240 bytes</span>
<span class="plain-syntax"> ---- table 7 objects, 56672 bytes</span>
<span class="plain-syntax"> ---- pcalc_func_array 1 x 1000 objects, 56032 bytes</span>
@ -188,20 +188,20 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- HTML_tag_array 1 x 1000 objects, 48032 bytes</span>
<span class="plain-syntax"> ---- heading 212 objects, 47488 bytes</span>
<span class="plain-syntax"> ---- text_substitution 438 objects, 42048 bytes</span>
<span class="plain-syntax"> ---- to_family_data 512 objects, 40960 bytes</span>
<span class="plain-syntax"> ---- to_family_data 525 objects, 42000 bytes</span>
<span class="plain-syntax"> ---- activity_list_array 1 x 1000 objects, 40032 bytes</span>
<span class="plain-syntax"> ---- anl_clause_array 1 x 1000 objects, 40032 bytes</span>
<span class="plain-syntax"> ---- shared_variable_access_list_array 12 x 100 = 1200 objects, 38784 bytes</span>
<span class="plain-syntax"> ---- parsing_data 677 objects, 37912 bytes</span>
<span class="plain-syntax"> ---- production_list 633 objects, 35448 bytes</span>
<span class="plain-syntax"> ---- production_list 627 objects, 35112 bytes</span>
<span class="plain-syntax"> ---- regions_data 677 objects, 32496 bytes</span>
<span class="plain-syntax"> ---- counting_data 677 objects, 32496 bytes</span>
<span class="plain-syntax"> ---- property_permission 96 objects, 31488 bytes</span>
<span class="plain-syntax"> ---- stack_frame_box 307 objects, 29472 bytes</span>
<span class="plain-syntax"> ---- verb_sense 407 objects, 29304 bytes</span>
<span class="plain-syntax"> ---- action_pattern_array 7 x 100 = 700 objects, 28224 bytes</span>
<span class="plain-syntax"> ---- filename 703 objects, 28120 bytes</span>
<span class="plain-syntax"> ---- pathname 665 objects, 26600 bytes</span>
<span class="plain-syntax"> ---- filename 702 objects, 28080 bytes</span>
<span class="plain-syntax"> ---- pathname 664 objects, 26560 bytes</span>
<span class="plain-syntax"> ---- shared_variable_set_array 6 x 100 = 600 objects, 24192 bytes</span>
<span class="plain-syntax"> ---- parse_node_tree 27 objects, 23544 bytes</span>
<span class="plain-syntax"> ---- property 148 objects, 22496 bytes</span>
@ -217,16 +217,17 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- pcalc_prop_deferral 86 objects, 17888 bytes</span>
<span class="plain-syntax"> ---- to_phrase_request 63 objects, 17136 bytes</span>
<span class="plain-syntax"> ---- understanding_reference_array 2 x 100 = 200 objects, 16064 bytes</span>
<span class="plain-syntax"> ---- match_avinue_array 1 x 1000 objects, 16032 bytes</span>
<span class="plain-syntax"> ---- action_name_list_array 1 x 1000 objects, 16032 bytes</span>
<span class="plain-syntax"> ---- match_avinue_array 1 x 1000 objects, 16032 bytes</span>
<span class="plain-syntax"> ---- adjective 140 objects, 15680 bytes</span>
<span class="plain-syntax"> ---- JSON_value 174 objects, 15312 bytes</span>
<span class="plain-syntax"> ---- booking_list 407 objects, 13024 bytes</span>
<span class="plain-syntax"> ---- web_bibliographic_datum 203 objects, 12992 bytes</span>
<span class="plain-syntax"> ---- adjective_iname_holder 323 objects, 12920 bytes</span>
<span class="plain-syntax"> ---- tree_node 149 objects, 11920 bytes</span>
<span class="plain-syntax"> ---- uniqueness_count 482 objects, 11568 bytes</span>
<span class="plain-syntax"> ---- inter_construct 32 objects, 11008 bytes</span>
<span class="plain-syntax"> ---- stopwatch_timer 123 objects, 9840 bytes</span>
<span class="plain-syntax"> ---- stopwatch_timer 124 objects, 9920 bytes</span>
<span class="plain-syntax"> ---- heading_tree 27 objects, 8424 bytes</span>
<span class="plain-syntax"> ---- inbuild_work 124 objects, 7936 bytes</span>
<span class="plain-syntax"> ---- equation_node 68 objects, 7616 bytes</span>
@ -235,35 +236,36 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- determiner 22 objects, 7216 bytes</span>
<span class="plain-syntax"> ---- inbuild_copy 59 objects, 7080 bytes</span>
<span class="plain-syntax"> ---- verb 109 objects, 6976 bytes</span>
<span class="plain-syntax"> ---- hierarchy_attachment_point 77 objects, 6776 bytes</span>
<span class="plain-syntax"> ---- hierarchy_attachment_point 78 objects, 6864 bytes</span>
<span class="plain-syntax"> ---- text_literal_holder 164 objects, 6560 bytes</span>
<span class="plain-syntax"> ---- inbuild_edition 85 objects, 6120 bytes</span>
<span class="plain-syntax"> ---- section_md 62 objects, 5952 bytes</span>
<span class="plain-syntax"> ---- parsed_use_option_setting 80 objects, 5760 bytes</span>
<span class="plain-syntax"> ---- inform_extension 26 objects, 5200 bytes</span>
<span class="plain-syntax"> ---- parsed_use_option_setting 79 objects, 5688 bytes</span>
<span class="plain-syntax"> ---- activity 35 objects, 5040 bytes</span>
<span class="plain-syntax"> ---- build_script 157 objects, 5024 bytes</span>
<span class="plain-syntax"> ---- inform_extension 26 objects, 4992 bytes</span>
<span class="plain-syntax"> ---- explicit_action_array 1 x 100 objects, 4832 bytes</span>
<span class="plain-syntax"> ---- value_property_data 86 objects, 4816 bytes</span>
<span class="plain-syntax"> ---- compatibility_specification 100 objects, 4800 bytes</span>
<span class="plain-syntax"> ---- parsing_pp_data 96 objects, 4608 bytes</span>
<span class="plain-syntax"> ---- command_line_switch 55 objects, 4400 bytes</span>
<span class="plain-syntax"> ---- cdoc_code_line 110 objects, 4400 bytes</span>
<span class="plain-syntax"> ---- semver_range 42 objects, 4368 bytes</span>
<span class="plain-syntax"> ---- use_option 32 objects, 4352 bytes</span>
<span class="plain-syntax"> ---- use_option 31 objects, 4216 bytes</span>
<span class="plain-syntax"> ---- either_or_property_data 62 objects, 3968 bytes</span>
<span class="plain-syntax"> ---- parse_node_annotation_type 120 objects, 3840 bytes</span>
<span class="plain-syntax"> ---- method_set 108 objects, 3456 bytes</span>
<span class="plain-syntax"> ---- parse_node_annotation_type 124 objects, 3968 bytes</span>
<span class="plain-syntax"> ---- definition 48 objects, 3456 bytes</span>
<span class="plain-syntax"> ---- property_setting_bp_data 86 objects, 3440 bytes</span>
<span class="plain-syntax"> ---- method_set 108 objects, 3456 bytes</span>
<span class="plain-syntax"> ---- submodule_request 86 objects, 3440 bytes</span>
<span class="plain-syntax"> ---- property_setting_bp_data 86 objects, 3440 bytes</span>
<span class="plain-syntax"> ---- kind_constructor_comparison_schema_array 1 x 100 objects, 3232 bytes</span>
<span class="plain-syntax"> ---- target_vm 20 objects, 2880 bytes</span>
<span class="plain-syntax"> ---- JSON_type 39 objects, 2808 bytes</span>
<span class="plain-syntax"> ---- JSON_single_requirement 55 objects, 2640 bytes</span>
<span class="plain-syntax"> ---- parentage_inference_data 79 objects, 2528 bytes</span>
<span class="plain-syntax"> ---- part_of_inference_data 79 objects, 2528 bytes</span>
<span class="plain-syntax"> ---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes</span>
<span class="plain-syntax"> ---- kind_constructor_instance_rule_array 1 x 100 objects, 2432 bytes</span>
<span class="plain-syntax"> ---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes</span>
<span class="plain-syntax"> ---- equation_symbol 30 objects, 2400 bytes</span>
<span class="plain-syntax"> ---- scene 1 object, 2352 bytes</span>
<span class="plain-syntax"> ---- build_step 28 objects, 2016 bytes</span>
@ -273,11 +275,11 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- inform_pipeline 24 objects, 1536 bytes</span>
<span class="plain-syntax"> ---- inbuild_requirement 37 objects, 1480 bytes</span>
<span class="plain-syntax"> ---- noun_filter_token 22 objects, 1408 bytes</span>
<span class="plain-syntax"> ---- special_meaning_holder 35 objects, 1400 bytes</span>
<span class="plain-syntax"> ---- inter_node_array 35 objects, 1400 bytes</span>
<span class="plain-syntax"> ---- special_meaning_holder 35 objects, 1400 bytes</span>
<span class="plain-syntax"> ---- JSON_requirement 42 objects, 1344 bytes</span>
<span class="plain-syntax"> ---- table_column 16 objects, 1280 bytes</span>
<span class="plain-syntax"> ---- constant_phrase 20 objects, 1280 bytes</span>
<span class="plain-syntax"> ---- table_column 16 objects, 1280 bytes</span>
<span class="plain-syntax"> ---- invocation_options_array 1 x 100 objects, 1224 bytes</span>
<span class="plain-syntax"> ---- direction_inference_data 30 objects, 1200 bytes</span>
<span class="plain-syntax"> ---- inbuild_search_result 29 objects, 1160 bytes</span>
@ -286,12 +288,12 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- runtime_kind_structure 13 objects, 1040 bytes</span>
<span class="plain-syntax"> ---- quantifier 16 objects, 1024 bytes</span>
<span class="plain-syntax"> ---- web_md 7 objects, 1008 bytes</span>
<span class="plain-syntax"> ---- named_rulebook_outcome 15 objects, 960 bytes</span>
<span class="plain-syntax"> ---- pipeline_stage 20 objects, 960 bytes</span>
<span class="plain-syntax"> ---- named_rulebook_outcome 15 objects, 960 bytes</span>
<span class="plain-syntax"> ---- JSON_pair_requirement 29 objects, 928 bytes</span>
<span class="plain-syntax"> ---- control_structure_phrase 12 objects, 864 bytes</span>
<span class="plain-syntax"> ---- kit_configuration 21 objects, 840 bytes</span>
<span class="plain-syntax"> ---- cached_understanding 21 objects, 840 bytes</span>
<span class="plain-syntax"> ---- kit_configuration 21 objects, 840 bytes</span>
<span class="plain-syntax"> ---- phrase_option_array 1 x 100 objects, 824 bytes</span>
<span class="plain-syntax"> ---- inform_kit 7 objects, 784 bytes</span>
<span class="plain-syntax"> ---- copy_error 7 objects, 784 bytes</span>
@ -300,10 +302,11 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- implication 13 objects, 624 bytes</span>
<span class="plain-syntax"> ---- chapter_md 7 objects, 616 bytes</span>
<span class="plain-syntax"> ---- code_generation 1 object, 576 bytes</span>
<span class="plain-syntax"> ---- cdoc_paragraph 18 objects, 576 bytes</span>
<span class="plain-syntax"> ---- inter_warehouse_room 10 objects, 560 bytes</span>
<span class="plain-syntax"> ---- module 7 objects, 560 bytes</span>
<span class="plain-syntax"> ---- generated_segment 14 objects, 560 bytes</span>
<span class="plain-syntax"> ---- inter_annotation_form 14 objects, 560 bytes</span>
<span class="plain-syntax"> ---- module 7 objects, 560 bytes</span>
<span class="plain-syntax"> ---- rulebook_outcome 17 objects, 544 bytes</span>
<span class="plain-syntax"> ---- small_word_set 11 objects, 528 bytes</span>
<span class="plain-syntax"> ---- i6_memory_setting 15 objects, 480 bytes</span>
@ -311,20 +314,22 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- bp_family 14 objects, 448 bytes</span>
<span class="plain-syntax"> ---- inbuild_genre 8 objects, 448 bytes</span>
<span class="plain-syntax"> ---- inference_family 11 objects, 440 bytes</span>
<span class="plain-syntax"> ---- source_file 5 objects, 400 bytes</span>
<span class="plain-syntax"> ---- article_usage 8 objects, 384 bytes</span>
<span class="plain-syntax"> ---- source_file 5 objects, 360 bytes</span>
<span class="plain-syntax"> ---- tree_inventory 1 object, 320 bytes</span>
<span class="plain-syntax"> ---- grammatical_category 8 objects, 320 bytes</span>
<span class="plain-syntax"> ---- pronoun 8 objects, 320 bytes</span>
<span class="plain-syntax"> ---- door_dir_notice 5 objects, 320 bytes</span>
<span class="plain-syntax"> ---- cached_kind_declaration 8 objects, 320 bytes</span>
<span class="plain-syntax"> ---- module_request 8 objects, 320 bytes</span>
<span class="plain-syntax"> ---- grammatical_category 8 objects, 320 bytes</span>
<span class="plain-syntax"> ---- cached_kind_declaration 8 objects, 320 bytes</span>
<span class="plain-syntax"> ---- tree_inventory 1 object, 320 bytes</span>
<span class="plain-syntax"> ---- door_dir_notice 5 objects, 320 bytes</span>
<span class="plain-syntax"> ---- pronoun 8 objects, 320 bytes</span>
<span class="plain-syntax"> ---- inter_pipeline 1 object, 312 bytes</span>
<span class="plain-syntax"> ---- compiled_documentation 4 objects, 288 bytes</span>
<span class="plain-syntax"> ---- up_family 9 objects, 288 bytes</span>
<span class="plain-syntax"> ---- tree_node_type 6 objects, 288 bytes</span>
<span class="plain-syntax"> ---- compilation_unit 5 objects, 280 bytes</span>
<span class="plain-syntax"> ---- door_to_notice 5 objects, 280 bytes</span>
<span class="plain-syntax"> ---- explicit_bp_data 5 objects, 280 bytes</span>
<span class="plain-syntax"> ---- contents_entry 7 objects, 280 bytes</span>
<span class="plain-syntax"> ---- door_to_notice 5 objects, 280 bytes</span>
<span class="plain-syntax"> ---- kit_dependency 5 objects, 240 bytes</span>
<span class="plain-syntax"> ---- verb_usage_tier 5 objects, 240 bytes</span>
<span class="plain-syntax"> ---- inform_project 1 object, 232 bytes</span>
@ -332,43 +337,49 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- local_block_value 4 objects, 224 bytes</span>
<span class="plain-syntax"> ---- test_scenario 1 object, 216 bytes</span>
<span class="plain-syntax"> ---- release_instructions 1 object, 208 bytes</span>
<span class="plain-syntax"> ---- attachment_instruction 5 objects, 200 bytes</span>
<span class="plain-syntax"> ---- build_skill 5 objects, 200 bytes</span>
<span class="plain-syntax"> ---- code_generator 5 objects, 200 bytes</span>
<span class="plain-syntax"> ---- plural_dictionary_entry 4 objects, 192 bytes</span>
<span class="plain-syntax"> ---- attachment_instruction 5 objects, 200 bytes</span>
<span class="plain-syntax"> ---- cdoc_heading 4 objects, 192 bytes</span>
<span class="plain-syntax"> ---- cdoc_code_sample 6 objects, 192 bytes</span>
<span class="plain-syntax"> ---- element_activation 6 objects, 192 bytes</span>
<span class="plain-syntax"> ---- plural_dictionary_entry 4 objects, 192 bytes</span>
<span class="plain-syntax"> ---- cdoc_passage 7 objects, 168 bytes</span>
<span class="plain-syntax"> ---- imperative_defn_family 4 objects, 160 bytes</span>
<span class="plain-syntax"> ---- inter_architecture 4 objects, 160 bytes</span>
<span class="plain-syntax"> ---- cdoc_example 4 objects, 160 bytes</span>
<span class="plain-syntax"> ---- heterogeneous_tree 4 objects, 160 bytes</span>
<span class="plain-syntax"> ---- inference_subject_family 5 objects, 160 bytes</span>
<span class="plain-syntax"> ---- inbuild_nest 3 objects, 120 bytes</span>
<span class="plain-syntax"> ---- inform_language 1 object, 104 bytes</span>
<span class="plain-syntax"> ---- group_together_function 2 objects, 80 bytes</span>
<span class="plain-syntax"> ---- article 2 objects, 80 bytes</span>
<span class="plain-syntax"> ---- compile_task_data 1 object, 80 bytes</span>
<span class="plain-syntax"> ---- article 2 objects, 80 bytes</span>
<span class="plain-syntax"> ---- inter_warehouse 1 object, 56 bytes</span>
<span class="plain-syntax"> ---- build_methodology 1 object, 56 bytes</span>
<span class="plain-syntax"> ---- figures_data 1 object, 56 bytes</span>
<span class="plain-syntax"> ---- star_invention 1 object, 48 bytes</span>
<span class="plain-syntax"> ---- inform_kit_ittt 1 object, 48 bytes</span>
<span class="plain-syntax"> ---- star_invention 1 object, 48 bytes</span>
<span class="plain-syntax"> ---- HTML_file_state 1 object, 48 bytes</span>
<span class="plain-syntax"> ---- tree_type 1 object, 40 bytes</span>
<span class="plain-syntax"> ---- loop_over_scope 1 object, 40 bytes</span>
<span class="plain-syntax"> ---- target_pragma_setting 1 object, 40 bytes</span>
<span class="plain-syntax"> ---- by_function_bp_data 1 object, 40 bytes</span>
<span class="plain-syntax"> ---- kind_template_definition 1 object, 40 bytes</span>
<span class="plain-syntax"> ---- I6_generation_data 1 object, 40 bytes</span>
<span class="plain-syntax"> ---- by_function_bp_data 1 object, 40 bytes</span>
<span class="plain-syntax"> ---- target_pragma_setting 1 object, 40 bytes</span>
<span class="plain-syntax">100.0% was used for memory not allocated for objects:</span>
<span class="plain-syntax">99.9% was used for memory not allocated for objects:</span>
<span class="plain-syntax"> 62.0% text stream storage 87731496 bytes in 501393 claims</span>
<span class="plain-syntax"> 3.8% dictionary storage 5377536 bytes in 7751 claims</span>
<span class="plain-syntax"> ---- sorting 2616 bytes in 531 claims</span>
<span class="plain-syntax"> 62.0% text stream storage 88036640 bytes in 501783 claims</span>
<span class="plain-syntax"> 3.7% dictionary storage 5377536 bytes in 7751 claims</span>
<span class="plain-syntax"> ---- sorting 2624 bytes in 531 claims</span>
<span class="plain-syntax"> 5.0% source text 7200000 bytes in 3 claims</span>
<span class="plain-syntax"> 7.6% source text details 10800000 bytes in 2 claims</span>
<span class="plain-syntax"> 0.1% documentation fragments 262144 bytes in 1 claim</span>
<span class="plain-syntax"> ---- linguistic stock array 81920 bytes in 2 claims</span>
<span class="plain-syntax"> ---- small word set array 105600 bytes in 22 claims</span>
<span class="plain-syntax"> 3.3% inter symbols storage 4701664 bytes in 28274 claims</span>
<span class="plain-syntax"> 11.8% inter bytecode storage 16757296 bytes in 15 claims</span>
<span class="plain-syntax"> 3.3% inter symbols storage 4703712 bytes in 28290 claims</span>
<span class="plain-syntax"> 11.8% inter bytecode storage 16758140 bytes in 15 claims</span>
<span class="plain-syntax"> 4.3% inter links storage 6222976 bytes in 11 claims</span>
<span class="plain-syntax"> 0.1% inter tree location list storage 191232 bytes in 32 claims</span>
<span class="plain-syntax"> 1.2% instance-of-kind counting 1731856 bytes in 1 claim</span>
@ -377,7 +388,7 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- code generation workspace for objects 3488 bytes in 19 claims</span>
<span class="plain-syntax"> 0.1% emitter array storage 281184 bytes in 2006 claims</span>
<span class="plain-syntax">-137.-3% was overhead - -194383312 bytes = -189827K = -185 MB</span>
<span class="plain-syntax">-137.-2% was overhead - -194583184 bytes = -190022K = -185 MB</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Preform grammar. </b>The full annotated description of the Preform grammar (see <a href="../words-module/4-ap.html" class="internal">About Preform (in words)</a>),
with optimisation details and hit/miss statistics added, is also long: it's
@ -386,29 +397,35 @@ sample, showing the nonterminal used to parse literals in Inform 7 source text:
</p>
<pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">&lt;s-literal&gt; hits 2128/24682 nti 25 constraint (none) extremes [1, infinity)</span>
<span class="plain-syntax">&lt;s-literal&gt; hits 2131/24680 nti 19 constraint (none) extremes [1, infinity)</span>
<span class="plain-syntax"> English:</span>
<span class="plain-syntax"> (@1)&lt;cardinal-number&gt;=1 </span>
<span class="plain-syntax"> (hits 171/171) (matched: '100') constraint CS = {r0} extremes [1, 1]</span>
<span class="plain-syntax"> (@1)minus (@2)&lt;cardinal-number&gt;=1 </span>
<span class="plain-syntax"> (hits 0/1393) constraint DS = {25} extremes [2, 2]</span>
<span class="plain-syntax"> (hits 0/1627) constraint DS = {19} extremes [2, 2]</span>
<span class="plain-syntax"> (@1)hexadecimal (@2)&lt;hexadecimal-number&gt;=1 </span>
<span class="plain-syntax"> (hits 0/1627) constraint DS = {19} extremes [2, 2]</span>
<span class="plain-syntax"> (@1)binary (@2)&lt;binary-number&gt;=1 </span>
<span class="plain-syntax"> (hits 0/1627) constraint DS = {19} extremes [2, 2]</span>
<span class="plain-syntax"> (@1)octal (@2)&lt;octal-number&gt;=1 </span>
<span class="plain-syntax"> (hits 0/1627) constraint DS = {19} extremes [2, 2]</span>
<span class="plain-syntax"> (@1)&lt;quoted-text&gt;=1 (@2)( (@3)&lt;response-letter&gt;=2 (@4)) </span>
<span class="plain-syntax"> (hits 274/841) (matched: '"[current item from the multiple object list]: [run paragraph on]" ( a )') constraint DS = {25} extremes [4, 4]</span>
<span class="plain-syntax"> (hits 274/846) (matched: '"[current item from the multiple object list]: [run paragraph on]" ( a )') constraint DS = {19} extremes [4, 4]</span>
<span class="plain-syntax"> (@1)&lt;quoted-text&gt;=1 </span>
<span class="plain-syntax"> (hits 1572/5753) (matched: 'Can be used for objects which are purely</span>
<span class="plain-syntax"> (hits 1575/5756) (matched: 'Can be used for objects which are purely</span>
<span class="plain-syntax"> conceptual, like ideas, or are needed for internal book-keeping.') constraint (none) extremes [1, 1]</span>
<span class="plain-syntax"> &lt;s-literal-real-number&gt;=1 </span>
<span class="plain-syntax"> (hits 11/10324) (matched: 'plus infinity') constraint (none) extremes [1, infinity)</span>
<span class="plain-syntax"> (hits 11/10320) (matched: 'plus infinity') constraint (none) extremes [1, infinity)</span>
<span class="plain-syntax"> (@1)&lt;s-literal-truth-state&gt;=1 </span>
<span class="plain-syntax"> (hits 100/115) (matched: 'false') constraint CS = {19} extremes [1, 1]</span>
<span class="plain-syntax"> (hits 100/379) (matched: 'false') constraint CS = {13} extremes [1, 1]</span>
<span class="plain-syntax"> &lt;s-literal-list&gt;=1 </span>
<span class="plain-syntax"> (hits 0/3339) constraint DS = {21} extremes [2, infinity)</span>
<span class="plain-syntax"> (hits 0/3246) constraint DS = {15} extremes [2, infinity)</span>
<span class="plain-syntax"> (@1)unicode &lt;s-unicode-character&gt;=1 </span>
<span class="plain-syntax"> (hits 0/3535) constraint DS = {25} extremes [2, infinity)</span>
<span class="plain-syntax"> (hits 0/3994) constraint DS = {19} extremes [2, infinity)</span>
<span class="plain-syntax"> &lt;s-literal-time&gt;=1 </span>
<span class="plain-syntax"> (hits 0/3471) constraint DW = {22, 23, 24} extremes [2, 5]</span>
<span class="plain-syntax"> (hits 0/3569) constraint DW = {16, 17, 18} extremes [2, 5]</span>
<span class="plain-syntax"> &lt;s-literal-unit-notation&gt;=1 </span>
<span class="plain-syntax"> (hits 0/10213) constraint (none) extremes [1, infinity)</span>
<span class="plain-syntax"> (hits 0/10209) constraint (none) extremes [1, infinity)</span>
</pre>
<p class="commentary">The unabridged grammar is here:
</p>
@ -418,7 +435,7 @@ sample, showing the nonterminal used to parse literals in Inform 7 source text:
<a href="preform-diagnostics.txt" download>
<button class="download-button">
<img src="../docs-assets/download.png" alt="download icon" height=16 width=16>
Download <b>preform-diagnostics.txt</b> (Preform diagnostics file, 403.2kB)
Download <b>preform-diagnostics.txt</b> (Preform diagnostics file, 401.4kB)
</button>
</a>
</p>
@ -463,8 +480,8 @@ for a lengthy read:
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'asking for information'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'out of world'</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out asking for information' {unit: 3} {imperative definition: 822}</span>
<span class="plain-syntax"> IMPERATIVE_NT'when play begins' {unit: 3} {imperative definition: 823}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out asking for information' {unit: 3} {imperative definition: 835}</span>
<span class="plain-syntax"> IMPERATIVE_NT'when play begins' {unit: 3} {imperative definition: 836}</span>
<span class="plain-syntax"> HEADING_NT'section 1 - errands' {heading 5} {under: H5'section 1 - errands'} {unit: 3}</span>
<span class="plain-syntax"> SENTENCE_NT'the current actor is a person which varies' {unit: 3} {classified}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
@ -474,8 +491,8 @@ for a lengthy read:
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'current owner' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: NONLOCAL_VARIABLE_NT'current owner' {nonlocal: 'current owner'(var)person}} {created here}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'person which varies' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values variable-pointer'-k} {creation: &lt;&lt; kind=people variable-pointer(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'every turn' {unit: 3} {imperative definition: 824}</span>
<span class="plain-syntax"> IMPERATIVE_NT'every turn' {unit: 3} {imperative definition: 825}</span>
<span class="plain-syntax"> IMPERATIVE_NT'every turn' {unit: 3} {imperative definition: 837}</span>
<span class="plain-syntax"> IMPERATIVE_NT'every turn' {unit: 3} {imperative definition: 838}</span>
<span class="plain-syntax"> SENTENCE_NT'a person can be active or passive' {unit: 3} {classified}</span>
<span class="plain-syntax"> VERB_NT'can be' {verb 'be able to be' s/p 3p act IS_TENSE +ve} {special meaning: can-be}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'a person' {refined} {refers: infs'person'} {creation: &lt;&lt; kind=person(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
@ -491,34 +508,34 @@ for a lengthy read:
<span class="plain-syntax"> VERB_NT'are' {verb 'be' 3p p act IS_TENSE +ve}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'character movement rules' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: CONSTANT_NT {kind: rulebook} {rulebook: character movement}} {created here}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'rulebook' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values based rulebook producing values'-k} {creation: &lt;&lt; kind=rulebook(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'the first character movement rule' {unit: 3} {imperative definition: 826}</span>
<span class="plain-syntax"> IMPERATIVE_NT'a character movement rule' {unit: 3} {imperative definition: 827}</span>
<span class="plain-syntax"> IMPERATIVE_NT'a character movement rule' {unit: 3} {imperative definition: 828}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to decide whether movement has not yet occurred' {unit: 3} {imperative definition: 829}</span>
<span class="plain-syntax"> IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 830}</span>
<span class="plain-syntax"> IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 831}</span>
<span class="plain-syntax"> IMPERATIVE_NT'the first character movement rule' {unit: 3} {imperative definition: 839}</span>
<span class="plain-syntax"> IMPERATIVE_NT'a character movement rule' {unit: 3} {imperative definition: 840}</span>
<span class="plain-syntax"> IMPERATIVE_NT'a character movement rule' {unit: 3} {imperative definition: 841}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to decide whether movement has not yet occurred' {unit: 3} {imperative definition: 842}</span>
<span class="plain-syntax"> IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 843}</span>
<span class="plain-syntax"> IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 844}</span>
<span class="plain-syntax"> SENTENCE_NT'the shopowner rules is a rulebook' {unit: 3} {classified} {clears pronouns}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'shopowner rules' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: CONSTANT_NT {kind: rulebook} {rulebook: shopowner}} {created here}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'rulebook' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values based rulebook producing values'-k} {creation: &lt;&lt; kind=rulebook(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'a shopowner rule' {unit: 3} {imperative definition: 832}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone closing a door when the person asked owns the' {unit: 3} {imperative definition: 833}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report vanessa closing the metal door when the metal door is' {unit: 3} {imperative definition: 834}</span>
<span class="plain-syntax"> IMPERATIVE_NT'a shopowner rule' {unit: 3} {imperative definition: 835}</span>
<span class="plain-syntax"> IMPERATIVE_NT'a shopowner rule' {unit: 3} {imperative definition: 845}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone closing a door when the person asked owns the' {unit: 3} {imperative definition: 846}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report vanessa closing the metal door when the metal door is' {unit: 3} {imperative definition: 847}</span>
<span class="plain-syntax"> IMPERATIVE_NT'a shopowner rule' {unit: 3} {imperative definition: 848}</span>
<span class="plain-syntax"> SENTENCE_NT'filing is an action applying to one thing' {unit: 3} {classified}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'filing'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'applying to one thing'</span>
<span class="plain-syntax"> IMPERATIVE_NT'before someone filing something which is not carried by the ' {unit: 3} {imperative definition: 836}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone filing' {unit: 3} {imperative definition: 837}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone filing' {unit: 3} {imperative definition: 838}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before someone filing something which is not carried by the ' {unit: 3} {imperative definition: 849}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone filing' {unit: 3} {imperative definition: 850}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone filing' {unit: 3} {imperative definition: 851}</span>
<span class="plain-syntax"> SENTENCE_NT'the shopper rules is a rulebook' {unit: 3} {classified} {clears pronouns}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'shopper rules' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: CONSTANT_NT {kind: rulebook} {rulebook: shopper}} {created here}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'rulebook' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values based rulebook producing values'-k} {creation: &lt;&lt; kind=rulebook(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'a shopper rule' {unit: 3} {imperative definition: 839}</span>
<span class="plain-syntax"> IMPERATIVE_NT'a shopper rule' {unit: 3} {imperative definition: 840}</span>
<span class="plain-syntax"> IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 841}</span>
<span class="plain-syntax"> IMPERATIVE_NT'a shopper rule' {unit: 3} {imperative definition: 852}</span>
<span class="plain-syntax"> IMPERATIVE_NT'a shopper rule' {unit: 3} {imperative definition: 853}</span>
<span class="plain-syntax"> IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 854}</span>
<span class="plain-syntax"> DEFN_CONT_NT'a room is air-conditioned' {unit: 3}</span>
<span class="plain-syntax"> CODE_BLOCK_NT</span>
<span class="plain-syntax"> CODE_BLOCK_NT {control structure: IF}</span>
@ -576,8 +593,8 @@ for a lengthy read:
<span class="plain-syntax"> COMMON_NOUN_NT'artwork' {indefinite 'an' n/m/f nom/acc s} {refined} {creation: &lt;&lt; kind=artwork(x) &gt;&gt;} {refers: infs'artwork'} {eval: TEST_VALUE_NT} {created here}</span>
<span class="plain-syntax"> KIND_NT'kind of thing' {refined} {refers: infs'thing'}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'thing' {refined} {refers: infs'thing'} {creation: &lt;&lt; kind=thing(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before printing the name of an artwork' {unit: 3} {imperative definition: 842}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after printing the name of an artwork' {unit: 3} {imperative definition: 843}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before printing the name of an artwork' {unit: 3} {imperative definition: 855}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after printing the name of an artwork' {unit: 3} {imperative definition: 856}</span>
<span class="plain-syntax"> SENTENCE_NT'an artwork can be submitted or reserved' {unit: 3} {classified}</span>
<span class="plain-syntax"> VERB_NT'can be' {verb 'be able to be' s/p 3p act IS_TENSE +ve} {special meaning: can-be}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'an artwork' {refined} {refers: infs'artwork'} {creation: &lt;&lt; kind=artwork(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
@ -590,49 +607,49 @@ for a lengthy read:
<span class="plain-syntax"> COMMON_NOUN_NT'book' {indefinite 'a' n/m/f nom/acc s} {refined} {creation: &lt;&lt; kind=book(x) &gt;&gt;} {refers: infs'book'} {eval: TEST_VALUE_NT} {created here}</span>
<span class="plain-syntax"> KIND_NT'kind of artwork' {refined} {refers: infs'artwork'}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'artwork' {refined} {refers: infs'artwork'} {creation: &lt;&lt; kind=artwork(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before someone resolving a book when the person asked is not' {unit: 3} {imperative definition: 844}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone resolving a book' {unit: 3} {imperative definition: 845}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone resolving a book' {unit: 3} {imperative definition: 846}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before listing contents' {unit: 3} {imperative definition: 847}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before grouping together books' {unit: 3} {imperative definition: 848}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before someone resolving a book when the person asked is not' {unit: 3} {imperative definition: 857}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone resolving a book' {unit: 3} {imperative definition: 858}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone resolving a book' {unit: 3} {imperative definition: 859}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before listing contents' {unit: 3} {imperative definition: 860}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before grouping together books' {unit: 3} {imperative definition: 861}</span>
<span class="plain-syntax"> SENTENCE_NT'a stamped envelope is a kind of thing' {unit: 3} {classified} {interpretation of subject: infs'book'}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'stamped envelope' {indefinite 'a' n/m/f nom/acc s} {refined} {creation: &lt;&lt; kind=stamped envelope(x) &gt;&gt;} {refers: infs'stamped envelope'} {eval: TEST_VALUE_NT} {created here}</span>
<span class="plain-syntax"> KIND_NT'kind of thing' {refined} {refers: infs'thing'}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'thing' {refined} {refers: infs'thing'} {creation: &lt;&lt; kind=thing(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before someone resolving a stamped envelope when the person ' {unit: 3} {imperative definition: 849}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone resolving a stamped envelope' {unit: 3} {imperative definition: 850}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone resolving a stamped envelope' {unit: 3} {imperative definition: 851}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of someone resolving a stamped envelope when the per' {unit: 3} {imperative definition: 852}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before someone resolving a stamped envelope when the person ' {unit: 3} {imperative definition: 862}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone resolving a stamped envelope' {unit: 3} {imperative definition: 863}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone resolving a stamped envelope' {unit: 3} {imperative definition: 864}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of someone resolving a stamped envelope when the per' {unit: 3} {imperative definition: 865}</span>
<span class="plain-syntax"> SENTENCE_NT'a dvd is a kind of artwork' {unit: 3} {classified} {interpretation of subject: infs'stamped envelope'}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'dvd' {indefinite 'a' n/m/f nom/acc s} {refined} {creation: &lt;&lt; kind=dvd(x) &gt;&gt;} {refers: infs'dvd'} {eval: TEST_VALUE_NT} {created here}</span>
<span class="plain-syntax"> KIND_NT'kind of artwork' {refined} {refers: infs'artwork'}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'artwork' {refined} {refers: infs'artwork'} {creation: &lt;&lt; kind=artwork(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before someone resolving a dvd when the person asked is not ' {unit: 3} {imperative definition: 853}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone resolving a dvd' {unit: 3} {imperative definition: 854}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone resolving a dvd' {unit: 3} {imperative definition: 855}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of someone resolving a dvd when the person asked car' {unit: 3} {imperative definition: 856}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before listing contents' {unit: 3} {imperative definition: 857}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before grouping together dvds' {unit: 3} {imperative definition: 858}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before someone resolving a dvd when the person asked is not ' {unit: 3} {imperative definition: 866}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone resolving a dvd' {unit: 3} {imperative definition: 867}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone resolving a dvd' {unit: 3} {imperative definition: 868}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of someone resolving a dvd when the person asked car' {unit: 3} {imperative definition: 869}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before listing contents' {unit: 3} {imperative definition: 870}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before grouping together dvds' {unit: 3} {imperative definition: 871}</span>
<span class="plain-syntax"> SENTENCE_NT'approaching is an action applying to one thing' {unit: 3} {classified}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'approaching'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'applying to one thing'</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone approaching' {unit: 3} {imperative definition: 859}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone approaching' {unit: 3} {imperative definition: 872}</span>
<span class="plain-syntax"> SENTENCE_NT'a coupon is a kind of thing' {unit: 3} {classified} {interpretation of subject: infs'dvd'}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'coupon' {indefinite 'a' n/m/f nom/acc s} {refined} {creation: &lt;&lt; kind=coupon(x) &gt;&gt;} {refers: infs'coupon'} {eval: TEST_VALUE_NT} {created here}</span>
<span class="plain-syntax"> KIND_NT'kind of thing' {refined} {refers: infs'thing'}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'thing' {refined} {refers: infs'thing'} {creation: &lt;&lt; kind=thing(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone resolving a coupon' {unit: 3} {imperative definition: 860}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone resolving a coupon' {unit: 3} {imperative definition: 873}</span>
<span class="plain-syntax"> SENTENCE_NT'the block giving rule is not listed in any rulebook' {unit: 3} {classified}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {rule placement sense: negative} {special meaning: rule-listed-in}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'the block giving rule'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'in any rulebook'</span>
<span class="plain-syntax"> IMPERATIVE_NT'check giving something to someone ( this is the block player' {unit: 3} {imperative definition: 861}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before someone resolving a coupon when the person asked is n' {unit: 3} {imperative definition: 862}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after someone giving a coupon to vanessa' {unit: 3} {imperative definition: 863}</span>
<span class="plain-syntax"> IMPERATIVE_NT'check giving something to someone ( this is the block player' {unit: 3} {imperative definition: 874}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before someone resolving a coupon when the person asked is n' {unit: 3} {imperative definition: 875}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after someone giving a coupon to vanessa' {unit: 3} {imperative definition: 876}</span>
<span class="plain-syntax"> SENTENCE_NT'infection color is a kind of value' {unit: 3} {classified} {interpretation of subject: infs'coupon'}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'infection color' {refined} {creation: &lt;&lt; kind=infection color(x) &gt;&gt;} {refers: infs'object'-k} {eval: TEST_VALUE_NT} {created here}</span>
@ -692,7 +709,7 @@ for a lengthy read:
<span class="plain-syntax"> AND_NT',' {refined}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'saffron silk' {refined} {refers: infs'saffron silk'} {eval: CONSTANT_NT'saffron silk' {kind: infection color} {instance: I81'saffron silk'[infection color]} {enumeration: 25}} {created here}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'cookie dough cream' {refined} {refers: infs'cookie dough cream'} {eval: CONSTANT_NT'cookie dough cream' {kind: infection color} {instance: I82'cookie dough cream'[infection color]} {enumeration: 26}} {created here}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to say list of flavors' {unit: 3} {imperative definition: 864}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to say list of flavors' {unit: 3} {imperative definition: 877}</span>
<span class="plain-syntax"> SENTENCE_NT'understand "ask vanessa for [flavored ice cream]" as buying ' {unit: 3} {classified}</span>
<span class="plain-syntax"> VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'"ask vanessa for [flavored ice cream]"'</span>
@ -705,8 +722,8 @@ for a lengthy read:
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'buying the flavor'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'applying to one infection color'</span>
<span class="plain-syntax"> IMPERATIVE_NT'check buying the flavor' {unit: 3} {imperative definition: 865}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out buying the flavor' {unit: 3} {imperative definition: 866}</span>
<span class="plain-syntax"> IMPERATIVE_NT'check buying the flavor' {unit: 3} {imperative definition: 878}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out buying the flavor' {unit: 3} {imperative definition: 879}</span>
<span class="plain-syntax"> SENTENCE_NT'understand "ice cream" or "cream" or "ice" or "sherbet" or "' {unit: 3} {classified}</span>
<span class="plain-syntax"> VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'"ice cream" or "cream" or "ice" or "sherbet" or "sorbet"'</span>
@ -740,12 +757,12 @@ for a lengthy read:
<span class="plain-syntax"> VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'the infection color property'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'referring to an ice cream cone'</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone resolving an ice cream cone' {unit: 3} {imperative definition: 867}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of someone eating a fresh ice cream cone' {unit: 3} {imperative definition: 868}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone eating an ice cream cone' {unit: 3} {imperative definition: 869}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before printing the name of an ice cream cone' {unit: 3} {imperative definition: 870}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone resolving an ice cream cone' {unit: 3} {imperative definition: 880}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of someone eating a fresh ice cream cone' {unit: 3} {imperative definition: 881}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone eating an ice cream cone' {unit: 3} {imperative definition: 882}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before printing the name of an ice cream cone' {unit: 3} {imperative definition: 883}</span>
<span class="plain-syntax"> HEADING_NT'section 2 - infection rules' {heading 5} {under: H5'section 2 - infection rules'} {unit: 3}</span>
<span class="plain-syntax"> IMPERATIVE_NT'this is the infection rule' {unit: 3} {imperative definition: 871}</span>
<span class="plain-syntax"> IMPERATIVE_NT'this is the infection rule' {unit: 3} {imperative definition: 884}</span>
<span class="plain-syntax"> SENTENCE_NT'a person can be infected or clean' {unit: 3} {classified}</span>
<span class="plain-syntax"> VERB_NT'can be' {verb 'be able to be' s/p 3p act IS_TENSE +ve} {special meaning: can-be}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'a person' {refined} {refers: infs'person'} {creation: &lt;&lt; kind=person(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
@ -758,11 +775,11 @@ for a lengthy read:
<span class="plain-syntax"> COMMON_NOUN_NT'person' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'person'} {creation: &lt;&lt; kind=person(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> ALLOWED_NT'has' {refined}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'infection color' {indefinite 'an' n/m/f nom/acc s} {refined}</span>
<span class="plain-syntax"> IMPERATIVE_NT'every turn' {unit: 3} {imperative definition: 872}</span>
<span class="plain-syntax"> IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 873}</span>
<span class="plain-syntax"> IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 874}</span>
<span class="plain-syntax"> IMPERATIVE_NT'when play begins' {unit: 3} {imperative definition: 875}</span>
<span class="plain-syntax"> IMPERATIVE_NT'every turn' {unit: 3} {imperative definition: 876}</span>
<span class="plain-syntax"> IMPERATIVE_NT'every turn' {unit: 3} {imperative definition: 885}</span>
<span class="plain-syntax"> IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 886}</span>
<span class="plain-syntax"> IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 887}</span>
<span class="plain-syntax"> IMPERATIVE_NT'when play begins' {unit: 3} {imperative definition: 888}</span>
<span class="plain-syntax"> IMPERATIVE_NT'every turn' {unit: 3} {imperative definition: 889}</span>
<span class="plain-syntax"> SENTENCE_NT'understand "sneeze on [something]" as sneezing on' {unit: 3} {classified}</span>
<span class="plain-syntax"> VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'"sneeze on [something]"'</span>
@ -771,11 +788,11 @@ for a lengthy read:
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'sneezing on'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'applying to one thing'</span>
<span class="plain-syntax"> IMPERATIVE_NT'check sneezing on' {unit: 3} {imperative definition: 877}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out sneezing on' {unit: 3} {imperative definition: 878}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone sneezing on' {unit: 3} {imperative definition: 879}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report sneezing on' {unit: 3} {imperative definition: 880}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone sneezing on' {unit: 3} {imperative definition: 881}</span>
<span class="plain-syntax"> IMPERATIVE_NT'check sneezing on' {unit: 3} {imperative definition: 890}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out sneezing on' {unit: 3} {imperative definition: 891}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone sneezing on' {unit: 3} {imperative definition: 892}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report sneezing on' {unit: 3} {imperative definition: 893}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone sneezing on' {unit: 3} {imperative definition: 894}</span>
<span class="plain-syntax"> SENTENCE_NT'understand "inject [someone] with [something]" as injecting ' {unit: 3} {classified}</span>
<span class="plain-syntax"> VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'"inject [someone] with [something]"'</span>
@ -796,10 +813,10 @@ for a lengthy read:
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'injecting it with'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'applying to two things'</span>
<span class="plain-syntax"> IMPERATIVE_NT'check injecting it with' {unit: 3} {imperative definition: 882}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out injecting it with' {unit: 3} {imperative definition: 883}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after injecting the player with something' {unit: 3} {imperative definition: 884}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report injecting it with' {unit: 3} {imperative definition: 885}</span>
<span class="plain-syntax"> IMPERATIVE_NT'check injecting it with' {unit: 3} {imperative definition: 895}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out injecting it with' {unit: 3} {imperative definition: 896}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after injecting the player with something' {unit: 3} {imperative definition: 897}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report injecting it with' {unit: 3} {imperative definition: 898}</span>
<span class="plain-syntax"> HEADING_NT'section 3 - geography' {heading 5} {under: H5'section 3 - geography'} {unit: 3}</span>
<span class="plain-syntax"> INCLUSION_NT'include locksmith by emily short' {unit: 3}</span>
<span class="plain-syntax"> HEADING_NT'version 14 of locksmith by emily short begins here' {heading 0} {under: H0'version 14 of locksmith by emily short begins here'} {includes: Locksmith by Emily Short v14 } {unit: 3}</span>
@ -824,9 +841,9 @@ for a lengthy read:
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'going toward'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'applying to one thing'</span>
<span class="plain-syntax"> IMPERATIVE_NT'check going toward' {unit: 3} {imperative definition: 923}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out going toward' {unit: 3} {imperative definition: 924}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of waiting when the destination of the player is not' {unit: 3} {imperative definition: 925}</span>
<span class="plain-syntax"> IMPERATIVE_NT'check going toward' {unit: 3} {imperative definition: 936}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out going toward' {unit: 3} {imperative definition: 937}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of waiting when the destination of the player is not' {unit: 3} {imperative definition: 938}</span>
<span class="plain-syntax"> SENTENCE_NT'understand "stop" or "cease" as stopping' {unit: 3} {classified}</span>
<span class="plain-syntax"> VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'"stop" or "cease"'</span>
@ -835,11 +852,11 @@ for a lengthy read:
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'stopping'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'applying to nothing'</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out stopping' {unit: 3} {imperative definition: 926}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report stopping' {unit: 3} {imperative definition: 927}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after going to an air-conditioned room' {unit: 3} {imperative definition: 928}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after going from an air-conditioned room' {unit: 3} {imperative definition: 929}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of listening to an air-conditioned room' {unit: 3} {imperative definition: 930}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out stopping' {unit: 3} {imperative definition: 939}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report stopping' {unit: 3} {imperative definition: 940}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after going to an air-conditioned room' {unit: 3} {imperative definition: 941}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after going from an air-conditioned room' {unit: 3} {imperative definition: 942}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of listening to an air-conditioned room' {unit: 3} {imperative definition: 943}</span>
<span class="plain-syntax"> SENTENCE_NT'the alfred cralle pool hall is a room' {unit: 3} {classified} {interpretation of subject: infs'person'}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'alfred cralle pool hall' {definite 'the' n/m/f s/p nom/acc} {refined} {refers: infs'alfred cralle pool hall'} {eval: CONSTANT_NT'alfred cralle pool hall' {kind: object} {instance: I83'alfred cralle pool hall'} {enumeration: 0}} {created here}</span>
@ -881,7 +898,7 @@ for a lengthy read:
<span class="plain-syntax"> PROPER_NOUN_NT'felt door' {definite 'the' n/m/f s/p nom/acc} {refined} {refers: infs'felt door'} {eval: CONSTANT_NT'felt door' {kind: door} {instance: I85'felt door'} {enumeration: 0}}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'description' {refined} {eval: CONSTANT_NT {kind: texts valued property} {property: 'description'=text}}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'"It has a prominent lock, designed for an old-fashioned key.' {refined} {eval: CONSTANT_NT'"It has a prominent lock, designed for an old-fashioned key.' {kind: text}}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after locking a door with something in the presence of an ot' {unit: 3} {imperative definition: 931}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after locking a door with something in the presence of an ot' {unit: 3} {imperative definition: 944}</span>
<span class="plain-syntax"> SENTENCE_NT'nancy johnson memorial square is west of the felt door' {unit: 3} {classified} {interpretation of subject: infs'key to the city'}</span>
<span class="plain-syntax"> VERB_NT'is west of' {verb 'be' 3p s act IS_TENSE +ve} {prep1: west of}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'nancy johnson memorial square' {refined} {refers: infs'nancy johnson memorial square'} {eval: CONSTANT_NT'nancy johnson memorial square' {kind: object} {instance: I87'nancy johnson memorial square'} {enumeration: 0}} {created here}</span>
@ -943,8 +960,8 @@ for a lengthy read:
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'slot' {definite 'the' n/m/f s/p nom/acc} {refined} {refers: infs'slot'} {eval: CONSTANT_NT'slot' {kind: object} {instance: I92'slot'} {enumeration: 0}}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'container' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'container'} {creation: &lt;&lt; kind=container(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out inserting something into the slot' {unit: 3} {imperative definition: 932}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report inserting something into the slot' {unit: 3} {imperative definition: 933}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out inserting something into the slot' {unit: 3} {imperative definition: 945}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report inserting something into the slot' {unit: 3} {imperative definition: 946}</span>
<span class="plain-syntax"> SENTENCE_NT'hamwi street is northeast of an iron gate' {unit: 3} {classified} {interpretation of subject: infs'slot'}</span>
<span class="plain-syntax"> VERB_NT'is northeast of' {verb 'be' 3p s act IS_TENSE +ve} {prep1: northeast of}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'hamwi street' {refined} {refers: infs'hamwi street'} {eval: CONSTANT_NT'hamwi street' {kind: object} {instance: I93'hamwi street'} {enumeration: 0}} {created here}</span>
@ -968,7 +985,7 @@ for a lengthy read:
<span class="plain-syntax"> AND_NT'and' {refined}</span>
<span class="plain-syntax"> ADJECTIVE_NT'lockable' {refined} {predicate: lockable} {creation: &lt;&lt; lockable(x) ^ lockable(x) &gt;&gt;}</span>
<span class="plain-syntax"> ADJECTIVE_NT'unlocked' {refined} {predicate: unlocked} {creation: &lt;&lt; unlocked(x) ^ unlocked(x) &gt;&gt;}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before printing the name of the iron gate while not opening ' {unit: 3} {imperative definition: 934}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before printing the name of the iron gate while not opening ' {unit: 3} {imperative definition: 947}</span>
<span class="plain-syntax"> SENTENCE_NT'cold comfort ice cream is north of a metal door' {unit: 3} {classified} {interpretation of subject: infs'iron gate'}</span>
<span class="plain-syntax"> VERB_NT'is north of' {verb 'be' 3p s act IS_TENSE +ve} {prep1: north of}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'cold comfort ice cream' {refined} {refers: infs'cold comfort ice cream'} {eval: CONSTANT_NT'cold comfort ice cream' {kind: object} {instance: I95'cold comfort ice cream'} {enumeration: 0}} {created here}</span>
@ -1074,8 +1091,8 @@ for a lengthy read:
<span class="plain-syntax"> VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'"glass"'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'the box'</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of attacking the closed emergency box' {unit: 3} {imperative definition: 935}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of attacking the open emergency box' {unit: 3} {imperative definition: 936}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of attacking the closed emergency box' {unit: 3} {imperative definition: 948}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of attacking the open emergency box' {unit: 3} {imperative definition: 949}</span>
<span class="plain-syntax"> SENTENCE_NT'the syringe is in the emergency box' {unit: 3} {classified} {interpretation of subject: infs'emergency box'}</span>
<span class="plain-syntax"> VERB_NT'is in' {verb 'be' 3p s act IS_TENSE +ve} {prep1: in}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'syringe' {definite 'the' n/m/f s/p nom/acc} {refined} {refers: infs'syringe'} {eval: CONSTANT_NT'syringe' {kind: object} {instance: I104'syringe'} {enumeration: 0}} {created here}</span>
@ -1178,8 +1195,8 @@ for a lengthy read:
<span class="plain-syntax"> SENTENCE_NT'use full-length room descriptions' {unit: 3} {classified}</span>
<span class="plain-syntax"> VERB_NT'use' {verb 'use' 3p p act IS_TENSE +ve} {special meaning: use}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'full-length room descriptions'</span>
<span class="plain-syntax"> IMPERATIVE_NT'after looking in an outdoors room' {unit: 3} {imperative definition: 937}</span>
<span class="plain-syntax"> IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 938}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after looking in an outdoors room' {unit: 3} {imperative definition: 950}</span>
<span class="plain-syntax"> IMPERATIVE_NT'definition' {unit: 3} {imperative definition: 951}</span>
<span class="plain-syntax"> DEFN_CONT_NT'a door is proximate' {unit: 3}</span>
<span class="plain-syntax"> CODE_BLOCK_NT</span>
<span class="plain-syntax"> CODE_BLOCK_NT {control structure: IF}</span>
@ -1200,7 +1217,7 @@ for a lengthy read:
<span class="plain-syntax"> INVOCATION_NT'yes' {phrase invoked: &lt;no-inter-name&gt;}</span>
<span class="plain-syntax"> INVOCATION_LIST_NT'no' {unit: 3}</span>
<span class="plain-syntax"> INVOCATION_NT'no' {phrase invoked: &lt;no-inter-name&gt;}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before exiting when the player is in an indoors room' {unit: 3} {imperative definition: 939}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before exiting when the player is in an indoors room' {unit: 3} {imperative definition: 952}</span>
<span class="plain-syntax"> SENTENCE_NT'blank is a room' {unit: 3} {classified} {interpretation of subject: infs'key to the city'}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'blank' {refined} {refers: infs'blank'} {eval: CONSTANT_NT'blank' {kind: object} {instance: I108'blank'} {enumeration: 0}} {created here}</span>
@ -1426,15 +1443,15 @@ for a lengthy read:
<span class="plain-syntax"> PROPER_NOUN_NT'ned' {refined} {refers: infs'ned'} {eval: CONSTANT_NT'ned' {kind: man} {instance: I161'ned'} {enumeration: 0}}</span>
<span class="plain-syntax"> RELATIONSHIP_NT'owns' {meaning: ownership-r} {refined}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'movie rental' {definite 'the' n/m/f s/p nom/acc} {refined} {refers: infs'movie rental store'} {eval: CONSTANT_NT'movie rental store' {kind: object} {instance: I99'movie rental store'} {enumeration: 0}}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after printing the name of someone ( called target ) while l' {unit: 3} {imperative definition: 940}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after printing the name of someone ( called target ) while l' {unit: 3} {imperative definition: 953}</span>
<span class="plain-syntax"> SENTENCE_NT'the description of a person is usually "[The noun] [if the n' {unit: 3} {classified} {interpretation of subject: infs'ned'}</span>
<span class="plain-syntax"> VERB_NT'is usually' {certainty:likely} {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> X_OF_Y_NT'description of a person' {definite 'the' n/m/f s/p nom/acc} {refined}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'person' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'person'} {creation: &lt;&lt; kind=person(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'description' {refined} {eval: CONSTANT_NT {kind: texts valued property} {property: 'description'=text}}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'"[The noun] [if the noun is clean]looks healthy[otherwise]is' {refined} {eval: CONSTANT_NT'"[The noun] [if the noun is clean]looks healthy[otherwise]is' {kind: text}}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after examining another person who is carrying something' {unit: 3} {imperative definition: 941}</span>
<span class="plain-syntax"> IMPERATIVE_NT'when play begins' {unit: 3} {imperative definition: 942}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after examining another person who is carrying something' {unit: 3} {imperative definition: 954}</span>
<span class="plain-syntax"> IMPERATIVE_NT'when play begins' {unit: 3} {imperative definition: 955}</span>
<span class="plain-syntax"> HEADING_NT'section 5 - conversation' {heading 5} {under: H5'section 5 - conversation'} {unit: 3}</span>
<span class="plain-syntax"> SENTENCE_NT'a person has a table name called conversation' {unit: 3} {classified}</span>
<span class="plain-syntax"> VERB_NT'has' {verb 'have' 3p s act IS_TENSE +ve}</span>
@ -1443,8 +1460,8 @@ for a lengthy read:
<span class="plain-syntax"> PROPERTYCALLED_NT'called'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'table name' {indefinite 'a' n/m/f nom/acc s}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'conversation'</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of asking someone about something' {unit: 3} {imperative definition: 943}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of telling someone about something' {unit: 3} {imperative definition: 944}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of asking someone about something' {unit: 3} {imperative definition: 956}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of telling someone about something' {unit: 3} {imperative definition: 957}</span>
<span class="plain-syntax"> SENTENCE_NT'understand "recap" or "recall" or "review" as recalling conv' {unit: 3} {classified}</span>
<span class="plain-syntax"> VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'"recap" or "recall" or "review"'</span>
@ -1453,7 +1470,7 @@ for a lengthy read:
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'recalling conversations'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'applying to nothing'</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out recalling conversations' {unit: 3} {imperative definition: 945}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out recalling conversations' {unit: 3} {imperative definition: 958}</span>
<span class="plain-syntax"> SENTENCE_NT'the conversation of a person is usually table of general chi' {unit: 3} {classified} {interpretation of subject: infs'person'}</span>
<span class="plain-syntax"> VERB_NT'is usually' {certainty:likely} {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> X_OF_Y_NT'conversation of a person' {definite 'the' n/m/f s/p nom/acc} {refined}</span>
@ -1468,7 +1485,7 @@ for a lengthy read:
<span class="plain-syntax"> PROPER_NOUN_NT'conversation' {refined} {eval: CONSTANT_NT {kind: table names valued property} {property: 'conversation'=table name}}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'table of vanessa chatter' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: CONSTANT_NT'table of vanessa chatter' {kind: table name} {table: table_data} {meaning: {table of vanessa chatter = TABLE_MC}}}</span>
<span class="plain-syntax"> TABLE_NT'table of vanessa chatter topic reply summary turn stamp char' {unit: 3}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after reading a command' {unit: 3} {imperative definition: 946}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after reading a command' {unit: 3} {imperative definition: 959}</span>
<span class="plain-syntax"> HEADING_NT'section 6 - movement description' {heading 5} {under: H5'section 6 - movement description'} {unit: 3}</span>
<span class="plain-syntax"> SENTENCE_NT'a person has some text called walk style' {unit: 3} {classified}</span>
<span class="plain-syntax"> VERB_NT'has' {verb 'have' 3p s act IS_TENSE +ve}</span>
@ -1515,8 +1532,8 @@ for a lengthy read:
<span class="plain-syntax"> PROPER_NOUN_NT'"sashay"' {refined} {eval: CONSTANT_NT'"sashay"' {kind: text}}</span>
<span class="plain-syntax"> TABLE_NT'table of visible exits character second third heading chosen' {unit: 3}</span>
<span class="plain-syntax"> TABLE_NT'table of visible entrances character second third heading ch' {unit: 3}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to clear ( current table - a table name )' {unit: 3} {imperative definition: 947}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to tidy departures of ( current table - a table name )' {unit: 3} {imperative definition: 948}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to clear ( current table - a table name )' {unit: 3} {imperative definition: 960}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to tidy departures of ( current table - a table name )' {unit: 3} {imperative definition: 961}</span>
<span class="plain-syntax"> SENTENCE_NT'a door has a person called last opener' {unit: 3} {classified} {interpretation of subject: infs'person'}</span>
<span class="plain-syntax"> VERB_NT'has' {verb 'have' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'door' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'door'} {creation: &lt;&lt; kind=door(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
@ -1524,21 +1541,21 @@ for a lengthy read:
<span class="plain-syntax"> PROPERTYCALLED_NT'called'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'person' {indefinite 'a' n/m/f nom/acc s}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'last opener'</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone opening a door' {unit: 3} {imperative definition: 949}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone going through a door ( called route )' {unit: 3} {imperative definition: 950}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone opening a door' {unit: 3} {imperative definition: 962}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone going through a door ( called route )' {unit: 3} {imperative definition: 963}</span>
<span class="plain-syntax"> SENTENCE_NT'the last thing named is a thing that varies' {unit: 3} {classified} {interpretation of subject: infs'door'}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'last thing named' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: NONLOCAL_VARIABLE_NT'last thing named' {nonlocal: 'last thing named'(var)thing}} {created here}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'thing that varies' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values variable-pointer'-k} {creation: &lt;&lt; kind=things variable-pointer(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before printing the name of something ( called target ) whic' {unit: 3} {imperative definition: 951}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone going a direction' {unit: 3} {imperative definition: 952}</span>
<span class="plain-syntax"> IMPERATIVE_NT'this is the movement reporting rule' {unit: 3} {imperative definition: 953}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to generate descriptions from ( current table - a table name' {unit: 3} {imperative definition: 954}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before printing the name of something ( called target ) whic' {unit: 3} {imperative definition: 964}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone going a direction' {unit: 3} {imperative definition: 965}</span>
<span class="plain-syntax"> IMPERATIVE_NT'this is the movement reporting rule' {unit: 3} {imperative definition: 966}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to generate descriptions from ( current table - a table name' {unit: 3} {imperative definition: 967}</span>
<span class="plain-syntax"> SENTENCE_NT'the last person named is a person that varies' {unit: 3} {classified} {interpretation of subject: infs'door'}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'last person named' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: NONLOCAL_VARIABLE_NT'last person named' {nonlocal: 'last person named'(var)person}} {created here}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'person that varies' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values variable-pointer'-k} {creation: &lt;&lt; kind=people variable-pointer(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before printing the name of a person ( called target )' {unit: 3} {imperative definition: 955}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before printing the name of a person ( called target )' {unit: 3} {imperative definition: 968}</span>
<span class="plain-syntax"> SENTENCE_NT'group size is a number that varies' {unit: 3} {classified} {interpretation of subject: infs'door'}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'group size' {refined} {eval: NONLOCAL_VARIABLE_NT'group size' {nonlocal: 'group size'(var)number}} {created here}</span>
@ -1547,19 +1564,19 @@ for a lengthy read:
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'group size' {refined} {eval: NONLOCAL_VARIABLE_NT'group size' {nonlocal: 'group size'(var)number} {meaning: {group size = VARIABLE_MC}}}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'1' {refined} {eval: CONSTANT_NT'1' {kind: number} {explicit literal} {number: 1}}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to clear marked people' {unit: 3} {imperative definition: 956}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before listing nondescript items' {unit: 3} {imperative definition: 957}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to describe patients' {unit: 3} {imperative definition: 958}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to say ( named character - a man ) as pronoun' {unit: 3} {imperative definition: 959}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to say ( named character - a woman ) as pronoun' {unit: 3} {imperative definition: 960}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to say looks as though dipped in for ( index - a number )' {unit: 3} {imperative definition: 961}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to clear marked people' {unit: 3} {imperative definition: 969}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before listing nondescript items' {unit: 3} {imperative definition: 970}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to describe patients' {unit: 3} {imperative definition: 971}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to say ( named character - a man ) as pronoun' {unit: 3} {imperative definition: 972}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to say ( named character - a woman ) as pronoun' {unit: 3} {imperative definition: 973}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to say looks as though dipped in for ( index - a number )' {unit: 3} {imperative definition: 974}</span>
<span class="plain-syntax"> TABLE_NT'table of dipping phrases dipping "looks as though dipped in"' {unit: 3}</span>
<span class="plain-syntax"> SENTENCE_NT'a door is usually scenery' {unit: 3} {classified} {interpretation of subject: infs'door'}</span>
<span class="plain-syntax"> VERB_NT'is usually' {certainty:likely} {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'door' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'door'} {creation: &lt;&lt; kind=door(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> ADJECTIVE_NT'scenery' {refined} {predicate: scenery} {creation: &lt;&lt; scenery(x) ^ scenery(x) &gt;&gt;}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to make delimiter ( index - a number ) of ( count - a number' {unit: 3} {imperative definition: 962}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to say optional comma' {unit: 3} {imperative definition: 963}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to make delimiter ( index - a number ) of ( count - a number' {unit: 3} {imperative definition: 975}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to say optional comma' {unit: 3} {imperative definition: 976}</span>
<span class="plain-syntax"> SENTENCE_NT'test me with go to cold comfort / z / z / z / z / ask vaness' {unit: 3} {classified}</span>
<span class="plain-syntax"> VERB_NT'test' {verb 'test' 3p p act IS_TENSE +ve} {prep2: with} {special meaning: test-with}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'me'</span>

File diff suppressed because it is too large Load diff

View file

@ -181,21 +181,21 @@ than the number with correct ones
number of successes.
</li></ul>
<pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">Size of lexicon: 3163 excerpt meanings</span>
<span class="plain-syntax"> Stored among 856 words out of total vocabulary of 10784</span>
<span class="plain-syntax"> 720 words have a start list: longest belongs to report (with 293 meanings)</span>
<span class="plain-syntax">Size of lexicon: 3162 excerpt meanings</span>
<span class="plain-syntax"> Stored among 855 words out of total vocabulary of 10626</span>
<span class="plain-syntax"> 719 words have a start list: longest belongs to report (with 293 meanings)</span>
<span class="plain-syntax"> 21 words have an end list: longest belongs to digits (with 7 meanings)</span>
<span class="plain-syntax"> 29 words have a middle list: longest belongs to to (with 4 meanings)</span>
<span class="plain-syntax"> 108 words have a subset list: longest belongs to street (with 4 meanings)</span>
<span class="plain-syntax">Number of attempts to retrieve: 110552</span>
<span class="plain-syntax"> of which unsuccessful: 92407</span>
<span class="plain-syntax"> of which successful: 18145</span>
<span class="plain-syntax">Number of attempts to retrieve: 110520</span>
<span class="plain-syntax"> of which unsuccessful: 92374</span>
<span class="plain-syntax"> of which successful: 18146</span>
<span class="plain-syntax">Total attempts to match against excerpt meanings: 279588</span>
<span class="plain-syntax"> of which, total with incorrect hash codes: 256844</span>
<span class="plain-syntax"> of which, total with correct hash codes: 22744</span>
<span class="plain-syntax"> of which, total which matched: 19912</span>
<span class="plain-syntax">Total attempts to match against excerpt meanings: 279412</span>
<span class="plain-syntax"> of which, total with incorrect hash codes: 256664</span>
<span class="plain-syntax"> of which, total with correct hash codes: 22748</span>
<span class="plain-syntax"> of which, total which matched: 19917</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprevoff">&#10094;</li><li class="progresscurrentchapter">P</li><li class="progresscurrent">wtmd</li><li class="progresssection"><a href="P-htitm.html">htitm</a></li><li class="progresschapter"><a href="1-lm.html">1</a></li><li class="progresschapter"><a href="2-em.html">2</a></li><li class="progressnext"><a href="P-htitm.html">&#10095;</a></li></ul></div>

View file

@ -293,13 +293,13 @@ Within each category, items are listed in order of creation.
<pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">adjective: 140 items</span>
<span class="plain-syntax">article: 2 items</span>
<span class="plain-syntax">noun: 2396 items</span>
<span class="plain-syntax">noun: 2395 items</span>
<span class="plain-syntax">pronoun: 8 items</span>
<span class="plain-syntax">preposition: 274 items</span>
<span class="plain-syntax">determiner: 22 items</span>
<span class="plain-syntax">verb: 109 items</span>
<span class="plain-syntax">verb_form: 388 items</span>
<span class="plain-syntax">total in all categories: 3339</span>
<span class="plain-syntax">total in all categories: 3338</span>
<span class="plain-syntax">adjective: 'even'</span>
<span class="plain-syntax">adjective: 'odd'</span>
@ -950,7 +950,6 @@ Within each category, items are listed in order of creation.
<span class="plain-syntax">noun: proper: 'printed engineering notation'</span>
<span class="plain-syntax">noun: proper: 'predictable randomisation'</span>
<span class="plain-syntax">noun: proper: 'numbered rules'</span>
<span class="plain-syntax">noun: proper: 'telemetry recordings'</span>
<span class="plain-syntax">noun: proper: 'no deprecated features'</span>
<span class="plain-syntax">noun: proper: 'authorial modesty'</span>
<span class="plain-syntax">noun: proper: 'command line echoing'</span>

View file

@ -85,7 +85,7 @@ the following annotation to the syntax tree:
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="P-htitm.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresscurrent">pm</li><li class="progresssection"><a href="1-tlm.html">tlm</a></li><li class="progresschapter"><a href="2-pl0.html">2</a></li><li class="progressnext"><a href="1-tlm.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="P-htitm.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresscurrent">pm</li><li class="progresschapter"><a href="2-pl0.html">2</a></li><li class="progressnext"><a href="2-pl0.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -166,10 +166,6 @@ problem is issued.
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">ACT_ON_SIGIL</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Problem %s issued from %s, line %d\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">sigil</span><span class="plain-syntax">, </span><span class="identifier-syntax">file</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">telemetry_recording</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="1-tlm.html#SP2" class="function-link"><span class="function-syntax">Telemetry::ensure_telemetry_file</span></a><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">telmy</span><span class="plain-syntax">, </span><span class="string-syntax">"Problem %s issued from %s, line %d\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">sigil</span><span class="plain-syntax">, </span><span class="identifier-syntax">file</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</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">sigil_of_latest_unlinked_problem</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sigil_of_latest_unlinked_problem</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">else</span>
@ -186,7 +182,7 @@ problem is issued.
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">STDERR</span><span class="plain-syntax">, </span><span class="string-syntax">"Problem__ %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">sigil_of_latest_problem</span><span class="plain-syntax">);</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="1-tlm.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-pm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresscurrent">pl0</li><li class="progresssection"><a href="2-pl1.html">pl1</a></li><li class="progresssection"><a href="2-pl2.html">pl2</a></li><li class="progresssection"><a href="2-pl3.html">pl3</a></li><li class="progressnext"><a href="2-pl1.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="1-pm.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-pm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresscurrent">pl0</li><li class="progresssection"><a href="2-pl1.html">pl1</a></li><li class="progresssection"><a href="2-pl2.html">pl2</a></li><li class="progresssection"><a href="2-pl3.html">pl3</a></li><li class="progressnext"><a href="2-pl1.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -209,16 +209,19 @@ HTML, they are dealt with elsewhere.
<span class="plain-syntax"> </span><span class="identifier-syntax">FORMAT_CONSOLE_PROBLEMS_CALLBACK</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">sig_mode</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">break_width</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">fallback</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> == </span><span class="identifier-syntax">problems_file</span><span class="plain-syntax">) </span><span class="identifier-syntax">html_flag</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sig_mode</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">k</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">indentation</span><span class="plain-syntax">; </span><span class="identifier-syntax">k</span><span class="plain-syntax">++) { </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">); </span><span class="identifier-syntax">line_width</span><span class="plain-syntax">+=2; }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">first</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">second</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">third</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-pl1.html#SP5_1" class="named-paragraph-link"><span class="named-paragraph">Extract details of the first source code reference, if there is one</span><span class="named-paragraph-number">5.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0, </span><span class="identifier-syntax">L</span><span class="plain-syntax">=</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">PBUFF</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">L</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-pl1.html#SP5_2" class="named-paragraph-link"><span class="named-paragraph">In HTML mode, convert drawing-your-attention arrows</span><span class="named-paragraph-number">5.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-pl1.html#SP5_3" class="named-paragraph-link"><span class="named-paragraph">In SIG mode, convert drawing-your-attention arrows</span><span class="named-paragraph-number">5.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">PBUFF</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">int</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">PBUFF</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-pl1.html#SP5_2" class="named-paragraph-link"><span class="named-paragraph">In HTML mode, convert drawing-your-attention arrows</span><span class="named-paragraph-number">5.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-pl1.html#SP5_3" class="named-paragraph-link"><span class="named-paragraph">In SIG mode, convert drawing-your-attention arrows</span><span class="named-paragraph-number">5.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-pl1.html#SP5_4" class="named-paragraph-link"><span class="named-paragraph">In plain text mode, remove bold and italic HTML tags</span><span class="named-paragraph-number">5.4</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">html_flag</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="identifier-syntax">SOURCE_REF_CHAR</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-pl1.html#SP5_5" class="named-paragraph-link"><span class="named-paragraph">Issue plain text paraphrase of source reference</span><span class="named-paragraph-number">5.5</span></a></span>
@ -226,6 +229,7 @@ HTML, they are dealt with elsewhere.
<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">html_flag</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">first</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">second</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">third</span><span class="plain-syntax">)</span>
@ -259,6 +263,9 @@ marker,
indentation. And similarly for <span class="extract"><span class="extract-syntax">&gt;++&gt;</span></span>, used to mark continuations.
</p>
<p class="commentary">Note that in HTML, this always opens one paragraph tag.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">In HTML mode, convert drawing-your-attention arrows</span><span class="named-paragraph-number">5.2</span></span><span class="comment-syntax"> =</span>
</p>
@ -270,27 +277,23 @@ indentation. And similarly for <span class="extract"><span class="extract-syntax
<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=\"hang\""</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">currently_issuing_a_warning</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;b&gt;Warning.&lt;/b&gt; "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;b&gt;Problem.&lt;/b&gt; "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">+=3; </span><span class="reserved-syntax">continue</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::includes_wide_string_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">PBUFF</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"&gt;++&gt;"</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">i</span><span class="plain-syntax"> = </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::includes_wide_string_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">PBUFF</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"&gt;++&gt;"</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">html_flag</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=\"in2\""</span><span class="plain-syntax">) </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">+=3; </span><span class="reserved-syntax">continue</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::includes_wide_string_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">PBUFF</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"&gt;---&gt;"</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">i</span><span class="plain-syntax"> = </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::includes_wide_string_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">PBUFF</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"&gt;---&gt;"</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">html_flag</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">); </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"hr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">problem_count_at_last_in</span><span class="plain-syntax"> = </span><span class="identifier-syntax">problem_count</span><span class="plain-syntax">+1;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">+=4; </span><span class="reserved-syntax">continue</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::includes_wide_string_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">PBUFF</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"&gt;+++&gt;"</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">i</span><span class="plain-syntax"> = </span><span class="constant-syntax">5</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::includes_wide_string_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">PBUFF</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"&gt;+++&gt;"</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">html_flag</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">"halftightin3\""</span><span class="plain-syntax">) </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">+=4; </span><span class="reserved-syntax">continue</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::includes_wide_string_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">PBUFF</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"&gt;++++&gt;"</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">i</span><span class="plain-syntax"> = </span><span class="constant-syntax">5</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::includes_wide_string_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">PBUFF</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"&gt;++++&gt;"</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">html_flag</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=\"tightin3\""</span><span class="plain-syntax">) </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">+=5; </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="constant-syntax">6</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">html_flag</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-pl1.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_3" class="paragraph-anchor"></a><b>&#167;5.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">In SIG mode, convert drawing-your-attention arrows</span><span class="named-paragraph-number">5.3</span></span><span class="comment-syntax"> =</span>
@ -307,7 +310,7 @@ indentation. And similarly for <span class="extract"><span class="extract-syntax
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"\033[31m"</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">"problem: "</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">"\033[0m"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">+=3; </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-pl1.html#SP5">&#167;5</a>.</li></ul>
@ -323,7 +326,7 @@ out when writing to plain text format.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">html_flag</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="constant-syntax">PROTECTED_LT_CHAR</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">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">L</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">PBUFF</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">) != </span><span class="constant-syntax">PROTECTED_GT_CHAR</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">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">PBUFF</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">PBUFF</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">) != </span><span class="constant-syntax">PROTECTED_GT_CHAR</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">continue</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">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'&lt;'</span><span class="plain-syntax">) &amp;&amp;</span>
@ -344,7 +347,7 @@ out when writing to plain text format.
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::includes_wide_string_at_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">PBUFF</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"&lt;/a&gt;"</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">Str::includes_wide_string_at_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">PBUFF</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"&lt;/span&gt;"</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">Str::includes_wide_string_at_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">PBUFF</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"&lt;/font&gt;"</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">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">L</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">PBUFF</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">)) </span><span class="identifier-syntax">i</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">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">PBUFF</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">PBUFF</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">)) </span><span class="identifier-syntax">i</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
@ -431,14 +434,9 @@ our choice.
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">redirected_problem_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> Current destination of problem message text</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ProblemBuffer::redirect_problem_stream</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">ProblemBuffer::redirect_problem_stream</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">redirected_problem_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S</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">telemetry_recording</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ProblemBuffer::set_telemetry</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">telemetry_recording</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ProblemBuffer::output_problem_buffer</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ProblemBuffer::output_problem_buffer</span></span>:<br/>Problems, Level 2 - <a href="2-pl2.html#SP3_1">&#167;3.1</a>, <a href="2-pl2.html#SP10">&#167;10</a></span></button><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>
@ -450,12 +448,9 @@ our choice.
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">DL</span><span class="plain-syntax">, </span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-pl1.html#SP5" class="function-link"><span class="function-syntax">ProblemBuffer::output_problem_buffer_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">DL</span><span class="plain-syntax">, </span><span class="identifier-syntax">indentation</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">DL</span><span class="plain-syntax">, </span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">telemetry_recording</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">telmy</span><span class="plain-syntax">, </span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-pl1.html#SP5" class="function-link"><span class="function-syntax">ProblemBuffer::output_problem_buffer_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">telmy</span><span class="plain-syntax">, </span><span class="identifier-syntax">indentation</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">telmy</span><span class="plain-syntax">, </span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><a href="2-pl1.html#SP5" class="function-link"><span class="function-syntax">ProblemBuffer::output_problem_buffer_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">redirected_problem_text</span><span class="plain-syntax">, </span><span class="identifier-syntax">indentation</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="2-pl1.html#SP5" class="function-link"><span class="function-syntax">ProblemBuffer::output_problem_buffer_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">redirected_problem_text</span><span class="plain-syntax">, </span><span class="identifier-syntax">indentation</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. Problems report and index. </b>That gives us enough infrastructure to produce the final report. Note the use

View file

@ -660,7 +660,7 @@ ourselves, and must delegate to:
<span class="plain-syntax"> </span><a href="2-pl0.html#SP1" class="function-link"><span class="function-syntax">ProblemSigils::exit</span></a><span class="plain-syntax">(2);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Problems::fatal_on_file</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">Problems::fatal_on_file</span></span>:<br/>Telemetry - <a href="1-tlm.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">message</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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Problems::fatal_on_file</span><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">message</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="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">STDERR</span><span class="plain-syntax">, </span><span class="identifier-syntax">message</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">STDERR</span><span class="plain-syntax">, </span><span class="string-syntax">"\nOffending filename: &lt;%f&gt;\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">STREAM_FLUSH</span><span class="plain-syntax">(</span><span class="identifier-syntax">STDERR</span><span class="plain-syntax">);</span>

View file

@ -51,7 +51,7 @@
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../services.html">Services</a></li><li><a href="index.html">problems</a></li><li><a href="index.html#P">Preliminaries</a></li><li><b>What This Module Does</b></li></ul></div>
<p class="purpose">An overview of the problems module's role and abilities.</p>
<ul class="toc"><li><a href="P-wtmd.html#SP1">&#167;1. Prerequisites</a></li><li><a href="P-wtmd.html#SP2">&#167;2. Problems and their sigils</a></li><li><a href="P-wtmd.html#SP4">&#167;4. The story of a non-fatal problem message</a></li><li><a href="P-wtmd.html#SP10">&#167;10. Telemetry</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="P-wtmd.html#SP1">&#167;1. Prerequisites</a></li><li><a href="P-wtmd.html#SP2">&#167;2. Problems and their sigils</a></li><li><a href="P-wtmd.html#SP4">&#167;4. The story of a non-fatal problem message</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Prerequisites. </b>The problems module is a part of the Inform compiler toolset. It is
presented as a literate program or "web". Before diving in:
@ -264,17 +264,10 @@ intercepted later on when the problems file is written out as HTML (see
</li></ul>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>When a portion of text has been buffered which Level 2 wants to get shot of,
it calls down to <a href="2-pl1.html#SP6" class="internal">ProblemBuffer::output_problem_buffer</a> to send this to a
file. By default, the text is actually sent three ways: to the standard
console output, to the debugging log (if there is one), and to the telemetry
file (if there is one). But this can be diverted with
<a href="2-pl1.html#SP6" class="internal">ProblemBuffer::redirect_problem_stream</a>, telling it to send problem text
just one way.
</p>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. Telemetry. </b>The <a href="1-tlm.html" class="internal">Telemetry</a> system isn't really to do with problems, except that it
can log them; it is an optional facility to log activity of a tool or app.
This is locally stored rather than sent over any wires, so perhaps there's
no "tele-" about it.
file. By default, the text is actually sent two ways: to the standard
console output, and to the debugging log (if there is one). But this can be
diverted with <a href="2-pl1.html#SP6" class="internal">ProblemBuffer::redirect_problem_stream</a>, telling it to send
problem text just one way.
</p>
<nav role="progress"><div class="progresscontainer">

View file

@ -74,11 +74,6 @@
<spon class="sectiontitle">Problems Module</span></a> -
<span class="sectionpurpose">Setting up the use of this module.</span></p>
</li>
<li>
<p class="sectionentry"><a href="1-tlm.html">
<spon class="sectiontitle">Telemetry</span></a> -
<span class="sectionpurpose">An optional facility for transcribing the outcome of runs of software.</span></p>
</li>
</ul>
</li>
<li>

View file

@ -679,7 +679,7 @@ list is not in fact a list of the contents of anything.
<span class="plain-syntax"> </span><span class="identifier-syntax">giving</span><span class="plain-syntax"> </span><span class="identifier-syntax">brief</span><span class="plain-syntax"> </span><span class="identifier-syntax">inventory</span><span class="plain-syntax"> </span><span class="identifier-syntax">information</span><span class="plain-syntax">, </span><span class="identifier-syntax">tersely</span><span class="plain-syntax">, </span><span class="identifier-syntax">not</span><span class="plain-syntax"> </span><span class="identifier-syntax">listing</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">concealed</span><span class="plain-syntax"> </span><span class="identifier-syntax">items</span><span class="plain-syntax">, </span><span class="identifier-syntax">listing</span><span class="plain-syntax"> </span><span class="identifier-syntax">marked</span><span class="plain-syntax"> </span><span class="identifier-syntax">items</span><span class="plain-syntax"> </span><span class="identifier-syntax">only</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">otherwise</span><span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"[a list of marked for listing things including contents]"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">domain</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">location</span><span class="plain-syntax">, </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">" here"</span><span class="plain-syntax"> (</span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">domain</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">location</span><span class="plain-syntax">, </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">" [here]"</span><span class="plain-syntax"> (</span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">".[paragraph break]"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">unfilter</span><span class="plain-syntax"> </span><span class="identifier-syntax">list</span><span class="plain-syntax"> </span><span class="identifier-syntax">recursion</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">end</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">listing</span><span class="plain-syntax"> </span><span class="identifier-syntax">nondescript</span><span class="plain-syntax"> </span><span class="identifier-syntax">items</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax"> </span><span class="identifier-syntax">with</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">domain</span><span class="plain-syntax">;</span>

View file

@ -284,7 +284,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
<span class="identifier-syntax">Check</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax"> </span><span class="identifier-syntax">removing</span><span class="plain-syntax"> </span><span class="identifier-syntax">something</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> (</span><span class="identifier-syntax">this</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">can</span><span class="plain-syntax">'</span><span class="identifier-syntax">t</span><span class="plain-syntax"> </span><span class="identifier-syntax">remove</span><span class="plain-syntax"> </span><span class="identifier-syntax">what</span><span class="plain-syntax">'</span><span class="identifier-syntax">s</span><span class="plain-syntax"> </span><span class="identifier-syntax">not</span><span class="plain-syntax"> </span><span class="identifier-syntax">inside</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">holder</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">noun</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">not</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">second</span><span class="plain-syntax"> </span><span class="identifier-syntax">noun</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"But [regarding the noun][they] [aren't] there now."</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"But [regarding the noun][they] [aren't] there [now]."</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">stop</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Check</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax"> </span><span class="identifier-syntax">removing</span><span class="plain-syntax"> </span><span class="identifier-syntax">something</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> (</span><span class="identifier-syntax">this</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">can</span><span class="plain-syntax">'</span><span class="identifier-syntax">t</span><span class="plain-syntax"> </span><span class="identifier-syntax">remove</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> </span><span class="identifier-syntax">people</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">):</span>
@ -337,7 +337,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
<span class="identifier-syntax">Check</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax"> </span><span class="identifier-syntax">dropping</span><span class="plain-syntax"> (</span><span class="identifier-syntax">this</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">can</span><span class="plain-syntax">'</span><span class="identifier-syntax">t</span><span class="plain-syntax"> </span><span class="identifier-syntax">drop</span><span class="plain-syntax"> </span><span class="identifier-syntax">what</span><span class="plain-syntax">'</span><span class="identifier-syntax">s</span><span class="plain-syntax"> </span><span class="identifier-syntax">already</span><span class="plain-syntax"> </span><span class="identifier-syntax">dropped</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">noun</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">holder</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"[The noun] [are] already here."</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"[The noun] [are] already [here]."</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">stop</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Check</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax"> </span><span class="identifier-syntax">dropping</span><span class="plain-syntax"> (</span><span class="identifier-syntax">this</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">can</span><span class="plain-syntax">'</span><span class="identifier-syntax">t</span><span class="plain-syntax"> </span><span class="identifier-syntax">drop</span><span class="plain-syntax"> </span><span class="identifier-syntax">what</span><span class="plain-syntax">'</span><span class="identifier-syntax">s</span><span class="plain-syntax"> </span><span class="identifier-syntax">not</span><span class="plain-syntax"> </span><span class="identifier-syntax">held</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">):</span>
@ -2665,7 +2665,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
<span class="identifier-syntax">Check</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax"> </span><span class="identifier-syntax">pushing</span><span class="plain-syntax"> </span><span class="identifier-syntax">something</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> (</span><span class="identifier-syntax">this</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">can</span><span class="plain-syntax">'</span><span class="identifier-syntax">t</span><span class="plain-syntax"> </span><span class="identifier-syntax">push</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> </span><span class="identifier-syntax">within</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">noun</span><span class="plain-syntax"> </span><span class="identifier-syntax">encloses</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"[The noun] [cannot] be pushed from here."</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"[The noun] [cannot] be pushed from [here]."</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">stop</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Check</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax"> </span><span class="identifier-syntax">pushing</span><span class="plain-syntax"> </span><span class="identifier-syntax">something</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> (</span><span class="identifier-syntax">this</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">standard</span><span class="plain-syntax"> </span><span class="identifier-syntax">pushing</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">directions</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">):</span>
@ -2983,7 +2983,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
<span class="identifier-syntax">Check</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax"> </span><span class="identifier-syntax">drinking</span><span class="plain-syntax"> (</span><span class="identifier-syntax">this</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">block</span><span class="plain-syntax"> </span><span class="identifier-syntax">drinking</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">now</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">prior</span><span class="plain-syntax"> </span><span class="identifier-syntax">named</span><span class="plain-syntax"> </span><span class="identifier-syntax">object</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">nothing</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"[There's] nothing suitable to drink here."</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"[There's] nothing suitable to drink [here]."</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">stop</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP158" class="paragraph-anchor"></a><b>&#167;158. Saying sorry. </b></p>
@ -3031,7 +3031,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
<span class="identifier-syntax">Check</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax"> </span><span class="identifier-syntax">swinging</span><span class="plain-syntax"> (</span><span class="identifier-syntax">this</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">block</span><span class="plain-syntax"> </span><span class="identifier-syntax">swinging</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">now</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">prior</span><span class="plain-syntax"> </span><span class="identifier-syntax">named</span><span class="plain-syntax"> </span><span class="identifier-syntax">object</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">nothing</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"[There's] nothing sensible to swing here."</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"[There's] nothing sensible to swing [here]."</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">stop</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP162" class="paragraph-anchor"></a><b>&#167;162. Rubbing. </b></p>

View file

@ -766,8 +766,7 @@ I6 primitives in the template layer.
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">adjust</span><span class="plain-syntax"> </span><span class="identifier-syntax">light</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">defined</span><span class="plain-syntax"> </span><span class="identifier-syntax">by</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"ADJUST_LIGHT_R"</span><span class="plain-syntax"> </span><span class="identifier-syntax">with</span>
<span class="plain-syntax"> </span><span class="string-syntax">"[It] [are] [if story tense is present tense]now [end if]pitch dark in</span>
<span class="string-syntax"> [if story tense is present tense]here[else]there[end if]!"</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">).</span>
<span class="plain-syntax"> </span><span class="string-syntax">"[It] [are] [if story tense is present tense]now [end if]pitch dark in [here]!"</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">).</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">advance</span><span class="plain-syntax"> </span><span class="identifier-syntax">time</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">defined</span><span class="plain-syntax"> </span><span class="identifier-syntax">by</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"ADVANCE_TIME_R"</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">generate</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">defined</span><span class="plain-syntax"> </span><span class="identifier-syntax">by</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"GENERATE_ACTION_R"</span><span class="plain-syntax"> </span><span class="identifier-syntax">with</span>
<span class="plain-syntax"> </span><span class="string-syntax">"(considering the first sixteen objects only)[command clarification break]"</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">),</span>

View file

@ -638,7 +638,7 @@ nests, respectively.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">shared_nest_list</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="function-syntax">Supervisor::internal</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Supervisor::internal</span></span>:<br/>Project Services - <a href="5-ps2.html#SP39">&#167;39</a><br/>Index Pages - <a href="7-ip.html#SP1_1">&#167;1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="function-syntax">Supervisor::internal</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Supervisor::internal</span></span>:<br/>Project Services - <a href="5-ps2.html#SP39">&#167;39</a><br/>Extensions Index Page - <a href="7-eip.html#SP1_1">&#167;1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RUN_ONLY_FROM_PHASE</span><span class="plain-syntax">(</span><span class="constant-syntax">NESTED_INBUILD_PHASE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">shared_internal_nest</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -679,9 +679,9 @@ just plain old files.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="1-ic.html#SP17" class="function-link"><span class="function-syntax">Supervisor::default_internal_path</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. </b>As noted above, the transient area is used for ephemera such as dynamically
written documentation and telemetry files. <span class="extract"><span class="extract-syntax">-transient</span></span> sets it, but otherwise
the external nest is used.
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. </b>The transient area can be used for build files for project files, where
there's no build directory provided by the project bundle. <span class="extract"><span class="extract-syntax">-transient</span></span> sets
it, but otherwise the external nest is used.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -793,7 +793,7 @@ location. If it hasn't, we create a project using <span class="extract"><span cl
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="function-syntax">Supervisor::project_set_at_command_line</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">Supervisor::project_set_at_command_line</span></span>:<br/>The Report - <a href="7-tr.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="function-syntax">Supervisor::project_set_at_command_line</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">Supervisor::project_set_at_command_line</span></span>:<br/>The Installer - <a href="7-ti.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">chosen_project</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>

View file

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

View file

@ -105,7 +105,7 @@ fields are blank.
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure copy_error is accessed in 2/nst, 3/is, 5/ks, 5/ls, 6/inc, 7/tm, 7/ip, 7/tr and here.</li></ul>
<ul class="endnotetexts"><li>The structure copy_error is accessed in 2/nst, 3/is, 5/ks, 5/ls, 6/inc, 7/tm, 7/eip, 7/ti and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>And now some creators.
</p>
@ -193,7 +193,7 @@ output.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CopyErrors::write</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">CopyErrors::write</span></span>:<br/>Copies - <a href="2-cps.html#SP5">&#167;5</a><br/>Index Pages - <a href="7-ip.html#SP1_2_2_2">&#167;1.2.2.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CopyErrors::write</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">CopyErrors::write</span></span>:<br/>Copies - <a href="2-cps.html#SP5">&#167;5</a><br/>Extensions Index Page - <a href="7-eip.html#SP1_2_2_2">&#167;1.2.2.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</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">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">error_category</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">OPEN_FAILED_CE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"unable to open file %f"</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">details_file</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">EXT_MISWORDED_CE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"extension misworded: %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">details</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>

View file

@ -91,7 +91,7 @@ stored here.
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure inbuild_copy is accessed in 1/ic, 2/ce, 2/nst, 2/jm, 3/bg, 3/ib, 3/bs2, 3/is, 3/is2, 3/is3, 3/is4, 4/em, 4/ebm, 4/km, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/ks, 5/ls, 5/ps2, 6/st, 6/hdn, 6/inc, 7/ip, 7/ip2, 7/tr and here.</li></ul>
<ul class="endnotetexts"><li>The structure inbuild_copy is accessed in 1/ic, 2/ce, 2/nst, 2/jm, 3/bg, 3/ib, 3/bs2, 3/is, 3/is2, 3/is3, 3/is4, 4/em, 4/ebm, 4/km, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/ks, 5/ls, 5/ps2, 6/st, 6/hdn, 6/inc, 7/tm, 7/eip, 7/ti, 7/dc, 7/dr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>Copies are created by the managers for the respective genres, usually when
claiming. If you are a manager, do not call this...
</p>
@ -167,7 +167,7 @@ for later reporting. These are stored in a list.
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Copies::list_attached_errors_to_HTML</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Copies::list_attached_errors_to_HTML</span></span>:<br/>The Report - <a href="7-tr.html#SP2_4_1">&#167;2.4.1</a>, <a href="7-tr.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Copies::list_attached_errors_to_HTML</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Copies::list_attached_errors_to_HTML</span></span>:<br/>The Installer - <a href="7-ti.html#SP2_4_1">&#167;2.4.1</a>, <a href="7-ti.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</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">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"ul"</span><span class="plain-syntax">); </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax">;</span>
@ -194,7 +194,7 @@ for later reporting. These are stored in a list.
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. Writing. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Copies::write_copy</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Copies::write_copy</span></span>:<br/>Supervisor Module - <a href="1-sm.html#SP4">&#167;4</a><br/>Nests - <a href="2-nst.html#SP9">&#167;9</a><br/>Build Graphs - <a href="3-bg.html#SP6">&#167;6</a>, <a href="3-bg.html#SP8">&#167;8</a>, <a href="3-bg.html#SP10_1">&#167;10.1</a><br/>The Report - <a href="7-tr.html#SP2_5_2">&#167;2.5.2</a>, <a href="7-tr.html#SP2_5">&#167;2.5</a>, <a href="7-tr.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Copies::write_copy</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Copies::write_copy</span></span>:<br/>Supervisor Module - <a href="1-sm.html#SP4">&#167;4</a><br/>Nests - <a href="2-nst.html#SP9">&#167;9</a><br/>Build Graphs - <a href="3-bg.html#SP6">&#167;6</a>, <a href="3-bg.html#SP8">&#167;8</a>, <a href="3-bg.html#SP10_1">&#167;10.1</a><br/>The Installer - <a href="7-ti.html#SP2_5_2">&#167;2.5.2</a>, <a href="7-ti.html#SP2_5">&#167;2.5</a>, <a href="7-ti.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-edt.html#SP1" class="function-link"><span class="function-syntax">Editions::write</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
@ -206,7 +206,7 @@ for later reporting. These are stored in a list.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">source_text_read</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Copies::get_source_text</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">Copies::get_source_text</span></span>:<br/>Extension Services - <a href="5-es.html#SP9">&#167;9</a>, <a href="5-es.html#SP11">&#167;11</a><br/>Project Services - <a href="5-ps2.html#SP33">&#167;33</a><br/>Inclusions - <a href="6-inc.html#SP6_1">&#167;6.1</a><br/>The Report - <a href="7-tr.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Copies::get_source_text</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">Copies::get_source_text</span></span>:<br/>Extension Services - <a href="5-es.html#SP9">&#167;9</a>, <a href="5-es.html#SP11">&#167;11</a><br/>Project Services - <a href="5-ps2.html#SP33">&#167;33</a><br/>Inclusions - <a href="6-inc.html#SP6_1">&#167;6.1</a><br/>The Installer - <a href="7-ti.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">source_text_read</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">source_text_read</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">errors_reading_source_text</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
@ -242,7 +242,7 @@ such newcomers are graphed too.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="function-syntax">Copies::construct_project_graph</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Copies::construct_project_graph</span></span>:<br/><a href="2-cps.html#SP12">&#167;12</a>, <a href="2-cps.html#SP13">&#167;13</a>, <a href="2-cps.html#SP14">&#167;14</a><br/>Index Pages - <a href="7-ip.html#SP6">&#167;6</a><br/>The Report - <a href="7-tr.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="function-syntax">Copies::construct_project_graph</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Copies::construct_project_graph</span></span>:<br/><a href="2-cps.html#SP12">&#167;12</a>, <a href="2-cps.html#SP13">&#167;13</a>, <a href="2-cps.html#SP14">&#167;14</a><br/>Extensions Index Page - <a href="7-eip.html#SP6">&#167;6</a><br/>The Installer - <a href="7-ti.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><a href="2-cps.html#SP9" class="function-link"><span class="function-syntax">Copies::building_soon</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP9" class="function-link"><span class="function-syntax">Copies::graph_everything</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax">;</span>
@ -392,7 +392,7 @@ its main task: building an Inform project.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Copies::copy_to</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Copies::copy_to</span></span>:<br/>Build Graphs - <a href="3-bg.html#SP10_1">&#167;10.1</a><br/>The Report - <a href="7-tr.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">destination_nest</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">syncing</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Copies::copy_to</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Copies::copy_to</span></span>:<br/>Build Graphs - <a href="3-bg.html#SP10_1">&#167;10.1</a><br/>The Installer - <a href="7-ti.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">destination_nest</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">syncing</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">build_methodology</span><span class="plain-syntax"> *</span><span class="identifier-syntax">meth</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">destination_nest</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre</span><span class="plain-syntax">, </span><span class="constant-syntax">GENRE_COPY_TO_NEST_MTID</span><span class="plain-syntax">,</span>

View file

@ -95,7 +95,7 @@ might work with all VMs, while version 8 required a 32-bit architecture.
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure inbuild_edition is accessed in 2/cps, 2/ce, 2/rqr, 2/nst, 2/jm, 3/bg, 3/is, 3/is2, 4/em, 4/ebm, 4/km, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/ks, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 6/vmg, 7/tm, 7/ip, 7/ip2, 7/tr and here.</li></ul>
<ul class="endnotetexts"><li>The structure inbuild_edition is accessed in 2/cps, 2/ce, 2/rqr, 2/nst, 2/jm, 3/bg, 3/is, 3/is2, 4/em, 4/ebm, 4/km, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/ks, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 6/vmg, 7/tm, 7/eip, 7/ti, 7/dc, 7/dr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>When a copy is to be duplicated into a nest <span class="extract"><span class="extract-syntax">N</span></span>, we need to work out where
to put it. For example, version 2.1 of the extension Marbles by Steve Hogarth
would go into <span class="extract"><span class="extract-syntax">N/Extensions/Steve Hogarth/Marbles-v2_1.i7x</span></span>. The following
@ -128,7 +128,7 @@ contributes only the un-filename-extended leafname <span class="extract"><span c
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Editions::inspect</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Editions::inspect</span></span>:<br/>Copies - <a href="2-cps.html#SP11">&#167;11</a><br/>The Report - <a href="7-tr.html#SP2_3">&#167;2.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Editions::inspect</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Editions::inspect</span></span>:<br/>Copies - <a href="2-cps.html#SP11">&#167;11</a><br/>The Installer - <a href="7-ti.html#SP2_3">&#167;2.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-edt.html#SP1" class="function-link"><span class="function-syntax">Editions::write</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Compatibility::test_universal</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">compatibility</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" ("</span><span class="plain-syntax">);</span>
@ -141,7 +141,7 @@ contributes only the un-filename-extended leafname <span class="extract"><span c
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Editions::cmp</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">Editions::cmp</span></span>:<br/>Copies - <a href="2-cps.html#SP10">&#167;10</a><br/>The Report - <a href="7-tr.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E2</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Editions::cmp</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">Editions::cmp</span></span>:<br/>Copies - <a href="2-cps.html#SP10">&#167;10</a><br/>The Installer - <a href="7-ti.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E2</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">r</span><span class="plain-syntax"> = </span><a href="2-wrk.html#SP10" class="function-link"><span class="function-syntax">Works::cmp</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E1</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">, </span><span class="identifier-syntax">E2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">r</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">r</span><span class="plain-syntax"> = </span><span class="identifier-syntax">VersionNumbers::cmp</span><span class="plain-syntax">(</span><span class="identifier-syntax">E1</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version</span><span class="plain-syntax">, </span><span class="identifier-syntax">E2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version</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">r</span><span class="plain-syntax">;</span>

View file

@ -95,7 +95,7 @@ the instance <span class="extract"><span class="extract-syntax">kit_genre</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">gen</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="function-syntax">Genres::name</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Genres::name</span></span>:<br/>Copies - <a href="2-cps.html#SP11">&#167;11</a><br/>The Report - <a href="7-tr.html#SP2_1">&#167;2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_genre</span><span class="plain-syntax"> *</span><span class="identifier-syntax">G</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Genres::name</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Genres::name</span></span>:<br/>Copies - <a href="2-cps.html#SP11">&#167;11</a><br/>The Installer - <a href="7-ti.html#SP2_1">&#167;2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_genre</span><span class="plain-syntax"> *</span><span class="identifier-syntax">G</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">G</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"(none)"</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">G</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre_name</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>

View file

@ -100,7 +100,7 @@ see below for why. Lower-tag-numbered origins are better than later ones.
<span class="definition-keyword">enum</span> <span class="constant-syntax">EXTENSION_NEST_TAG</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Nests::get_tag</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Nests::get_tag</span></span>:<br/><a href="2-nst.html#SP11">&#167;11</a><br/>Inbuild Control - <a href="1-ic.html#SP15">&#167;15</a><br/>Inform7 Skill - <a href="3-is2.html#SP1">&#167;1</a><br/>Extension Bundle Manager - <a href="4-ebm.html#SP5">&#167;5</a><br/>Inclusions - <a href="6-inc.html#SP6_1">&#167;6.1</a><br/>Index Pages - <a href="7-ip.html#SP1_1">&#167;1.1</a>, <a href="7-ip.html#SP1_2_2_4_4_1">&#167;1.2.2.4.4.1</a>, <a href="7-ip.html#SP1_2_2_4_4_3">&#167;1.2.2.4.4.3</a>, <a href="7-ip.html#SP1_2_2_4_4_4">&#167;1.2.2.4.4.4</a>, <a href="7-ip.html#SP7">&#167;7</a><br/>The Report - <a href="7-tr.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Nests::get_tag</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Nests::get_tag</span></span>:<br/><a href="2-nst.html#SP11">&#167;11</a><br/>Inbuild Control - <a href="1-ic.html#SP15">&#167;15</a><br/>Inform7 Skill - <a href="3-is2.html#SP1">&#167;1</a><br/>Extension Bundle Manager - <a href="4-ebm.html#SP5">&#167;5</a><br/>Inclusions - <a href="6-inc.html#SP6_1">&#167;6.1</a><br/>Extensions Index Page - <a href="7-eip.html#SP1_1">&#167;1.1</a>, <a href="7-eip.html#SP1_2_2_4_4_1">&#167;1.2.2.4.4.1</a>, <a href="7-eip.html#SP1_2_2_4_4_3">&#167;1.2.2.4.4.3</a>, <a href="7-eip.html#SP1_2_2_4_4_4">&#167;1.2.2.4.4.4</a>, <a href="7-eip.html#SP7">&#167;7</a><br/>The Installer - <a href="7-ti.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> -1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tag_value</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -151,7 +151,7 @@ can't install to a read-only nest.
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Nests::get_location</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Nests::get_location</span></span>:<br/>Inbuild Control - <a href="1-ic.html#SP15">&#167;15</a><br/>Index Pages - <a href="7-ip.html#SP1_2_1">&#167;1.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Nests::get_location</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Nests::get_location</span></span>:<br/>Inbuild Control - <a href="1-ic.html#SP15">&#167;15</a><br/>Extensions Index Page - <a href="7-eip.html#SP1_2_1">&#167;1.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">location</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -193,12 +193,12 @@ we create one of these for each hit:
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure inbuild_search_result is accessed in 2/ce, 2/rgs, 3/is, 5/ks, 5/ls, 6/inc, 7/tm, 7/ip, 7/tr and here.</li></ul>
<ul class="endnotetexts"><li>The structure inbuild_search_result is accessed in 2/ce, 2/rgs, 3/is, 5/ks, 5/ls, 6/inc, 7/tm, 7/eip, 7/ti and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>These can be created only as entries in a list:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Nests::add_search_result</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Nests::add_search_result</span></span>:<br/>Extension Manager - <a href="4-em.html#SP6">&#167;6</a><br/>Extension Bundle Manager - <a href="4-ebm.html#SP6">&#167;6</a><br/>Kit Manager - <a href="4-km.html#SP7">&#167;7</a><br/>Language Manager - <a href="4-lm.html#SP5">&#167;5</a><br/>Pipeline Manager - <a href="4-pm.html#SP5">&#167;5</a><br/>Template Manager - <a href="4-tm.html#SP5">&#167;5</a><br/>Index Pages - <a href="7-ip.html#SP1_1">&#167;1.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">results</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Nests::add_search_result</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Nests::add_search_result</span></span>:<br/>Extension Manager - <a href="4-em.html#SP6">&#167;6</a><br/>Extension Bundle Manager - <a href="4-ebm.html#SP6">&#167;6</a><br/>Kit Manager - <a href="4-km.html#SP7">&#167;7</a><br/>Language Manager - <a href="4-lm.html#SP5">&#167;5</a><br/>Pipeline Manager - <a href="4-pm.html#SP5">&#167;5</a><br/>Template Manager - <a href="4-tm.html#SP5">&#167;5</a><br/>Extensions Index Page - <a href="7-eip.html#SP1_1">&#167;1.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">results</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">R</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nest</span><span class="plain-syntax"> = </span><span class="identifier-syntax">N</span><span class="plain-syntax">;</span>
@ -213,7 +213,7 @@ genre's manager to look for copies of that genre:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Nests::search_for</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">Nests::search_for</span></span>:<br/><a href="2-nst.html#SP10">&#167;10</a><br/>Language Services - <a href="5-ls.html#SP11">&#167;11</a><br/>Project Services - <a href="5-ps2.html#SP39">&#167;39</a><br/>Inclusions - <a href="6-inc.html#SP6_1_2">&#167;6.1.2</a><br/>Index Pages - <a href="7-ip.html#SP1_1">&#167;1.1</a><br/>The Report - <a href="7-tr.html#SP2_4_4">&#167;2.4.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Nests::search_for</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">Nests::search_for</span></span>:<br/><a href="2-nst.html#SP10">&#167;10</a><br/>Language Services - <a href="5-ls.html#SP11">&#167;11</a><br/>Project Services - <a href="5-ps2.html#SP39">&#167;39</a><br/>Inclusions - <a href="6-inc.html#SP6_1_2">&#167;6.1.2</a><br/>Extensions Index Page - <a href="7-eip.html#SP1_1">&#167;1.1</a><br/>The Installer - <a href="7-ti.html#SP2_4_4">&#167;2.4.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">search_list</span><span class="plain-syntax">, </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">results</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STDOUT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">supervisor_verbosity</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">3</span><span class="plain-syntax">) {</span>

View file

@ -74,7 +74,7 @@ positions in the file system hierarchy which may or may not exist.
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inbuild_registry</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure inbuild_registry is accessed in 1/ic, 2/nst, 3/bg, 3/is2, 4/em, 4/ebm, 4/km, 4/lm, 4/pm, 4/tm, 5/ps2, 6/inc, 7/ip and here.</li></ul>
<ul class="endnotetexts"><li>The structure inbuild_registry is accessed in 1/ic, 2/nst, 3/bg, 3/is2, 4/em, 4/ebm, 4/km, 4/lm, 4/pm, 4/tm, 5/ps2, 6/inc, 7/eip and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b></p>
<pre class="displayed-code all-displayed-code code-font">

View file

@ -74,7 +74,7 @@ we can give a semantic version number range:
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure inbuild_requirement is accessed in 2/edt, 2/cps, 2/ce, 2/jm, 3/bg, 3/is, 3/is2, 4/em, 4/ebm, 4/km, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/ks, 5/ls, 5/ps2, 6/st, 6/hdn, 6/inc, 7/tm, 7/ip, 7/ip2, 7/tr and here.</li></ul>
<ul class="endnotetexts"><li>The structure inbuild_requirement is accessed in 2/edt, 2/cps, 2/ce, 2/jm, 3/bg, 3/is, 3/is2, 4/em, 4/ebm, 4/km, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/ks, 5/ls, 5/ps2, 6/st, 6/hdn, 6/inc, 7/tm, 7/eip, 7/ti, 7/dc, 7/dr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>Here are some creators:
</p>
@ -90,7 +90,7 @@ we can give a semantic version number range:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-rqr.html#SP2" class="function-link"><span class="function-syntax">Requirements::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">work</span><span class="plain-syntax">, </span><span class="identifier-syntax">VersionNumberRanges::any_range</span><span class="plain-syntax">());</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="function-syntax">Requirements::anything_of_genre</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">Requirements::anything_of_genre</span></span>:<br/>Language Services - <a href="5-ls.html#SP11">&#167;11</a><br/>Project Services - <a href="5-ps2.html#SP39">&#167;39</a><br/>Index Pages - <a href="7-ip.html#SP1_1">&#167;1.1</a><br/>The Report - <a href="7-tr.html#SP2_4_4">&#167;2.4.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_genre</span><span class="plain-syntax"> *</span><span class="identifier-syntax">G</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="function-syntax">Requirements::anything_of_genre</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">Requirements::anything_of_genre</span></span>:<br/>Language Services - <a href="5-ls.html#SP11">&#167;11</a><br/>Project Services - <a href="5-ps2.html#SP39">&#167;39</a><br/>Extensions Index Page - <a href="7-eip.html#SP1_1">&#167;1.1</a><br/>The Installer - <a href="7-ti.html#SP2_4_4">&#167;2.4.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_genre</span><span class="plain-syntax"> *</span><span class="identifier-syntax">G</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-rqr.html#SP2" class="function-link"><span class="function-syntax">Requirements::any_version_of</span></a><span class="plain-syntax">(</span><a href="2-wrk.html#SP2" class="function-link"><span class="function-syntax">Works::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">G</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">""</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">""</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
@ -243,7 +243,7 @@ a requirement, then so will all other copies of it.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Requirements::meets</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Requirements::meets</span></span>:<br/>Extension Manager - <a href="4-em.html#SP6">&#167;6</a><br/>Extension Bundle Manager - <a href="4-ebm.html#SP6">&#167;6</a><br/>Kit Manager - <a href="4-km.html#SP7">&#167;7</a><br/>Language Manager - <a href="4-lm.html#SP5">&#167;5</a><br/>Pipeline Manager - <a href="4-pm.html#SP5">&#167;5</a><br/>Template Manager - <a href="4-tm.html#SP5">&#167;5</a><br/>Extension Services - <a href="5-es.html#SP20">&#167;20</a><br/>Kit Services - <a href="5-ks.html#SP15">&#167;15</a><br/>Inclusions - <a href="6-inc.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">edition</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Requirements::meets</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Requirements::meets</span></span>:<br/>Extension Manager - <a href="4-em.html#SP6">&#167;6</a><br/>Extension Bundle Manager - <a href="4-ebm.html#SP6">&#167;6</a><br/>Kit Manager - <a href="4-km.html#SP7">&#167;7</a><br/>Language Manager - <a href="4-lm.html#SP5">&#167;5</a><br/>Pipeline Manager - <a href="4-pm.html#SP5">&#167;5</a><br/>Template Manager - <a href="4-tm.html#SP5">&#167;5</a><br/>Extension Services - <a href="5-es.html#SP21">&#167;21</a><br/>Kit Services - <a href="5-ks.html#SP15">&#167;15</a><br/>Inclusions - <a href="6-inc.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">edition</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</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">req</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">req</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">req</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre</span><span class="plain-syntax">)</span>

View file

@ -86,7 +86,7 @@ combination of the textual names and the hash code:
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure inbuild_work is accessed in 2/edt, 2/cps, 2/ce, 2/rqr, 2/jm, 3/bg, 3/is, 3/is2, 4/em, 4/ebm, 4/km, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/ks, 5/ls, 5/ps2, 6/inc, 7/tm, 7/ip, 7/tr and here.</li></ul>
<ul class="endnotetexts"><li>The structure inbuild_work is accessed in 2/edt, 2/cps, 2/ce, 2/rqr, 2/jm, 3/bg, 3/is, 3/is2, 4/em, 4/ebm, 4/km, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/ks, 5/ls, 5/ps2, 6/inc, 7/tm, 7/eip, 7/ti, 7/dc, 7/dr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>Each work structure is written only once, and its title and author name are
not subsequently altered.
</p>
@ -191,11 +191,11 @@ would both pass, whereas <a href="2-wrk.html#SP4" class="internal">Works::normal
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Works::write</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Works::write</span></span>:<br/>Editions - <a href="2-edt.html#SP1">&#167;1</a><br/>Build Graphs - <a href="3-bg.html#SP8">&#167;8</a>, <a href="3-bg.html#SP9">&#167;9</a><br/>The Report - <a href="7-tr.html#SP2_2">&#167;2.2</a>, <a href="7-tr.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Works::write</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Works::write</span></span>:<br/>Editions - <a href="2-edt.html#SP1">&#167;1</a><br/>Build Graphs - <a href="3-bg.html#SP8">&#167;8</a>, <a href="3-bg.html#SP9">&#167;9</a><br/>The Installer - <a href="7-ti.html#SP2_2">&#167;2.2</a>, <a href="7-ti.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre</span><span class="plain-syntax">, </span><span class="constant-syntax">GENRE_WRITE_WORK_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">work</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Works::write_to_HTML_file</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Works::write_to_HTML_file</span></span>:<br/><a href="2-wrk.html#SP7">&#167;7</a><br/>Individual Pages - <a href="7-ip2.html#SP2_1_1">&#167;2.1.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">fancy</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Works::write_to_HTML_file</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Works::write_to_HTML_file</span></span>:<br/><a href="2-wrk.html#SP7">&#167;7</a><br/>Documentation Renderer - <a href="7-dr.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">fancy</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">raw_title</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">fancy</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"extensionindexentry"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" by "</span><span class="plain-syntax">);</span>
@ -269,7 +269,7 @@ order-preserving. To emphasise this we return true or false rather than a
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Works::cmp</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Works::cmp</span></span>:<br/>Editions - <a href="2-edt.html#SP4">&#167;4</a><br/>Extension Services - <a href="5-es.html#SP5">&#167;5</a><br/>The Report - <a href="7-tr.html#SP2_4_5">&#167;2.4.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">w1</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">w2</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Works::cmp</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Works::cmp</span></span>:<br/>Editions - <a href="2-edt.html#SP4">&#167;4</a><br/>Extension Services - <a href="5-es.html#SP5">&#167;5</a><br/>The Installer - <a href="7-ti.html#SP2_4_5">&#167;2.4.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">w1</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">w2</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">w1</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">w2</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"bad work match"</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">d</span><span class="plain-syntax"> = </span><a href="2-gnr.html#SP5" class="function-link"><span class="function-syntax">Genres::cmp</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">w1</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre</span><span class="plain-syntax">, </span><span class="identifier-syntax">w2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre</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">d</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">d</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::cmp</span><span class="plain-syntax">(</span><span class="identifier-syntax">w1</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">author_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">w2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">author_name</span><span class="plain-syntax">);</span>
@ -284,7 +284,7 @@ single function testing if a work refers to them.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">a_work_for_standard_rules</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Works::is_standard_rules</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">Works::is_standard_rules</span></span>:<br/><a href="2-wrk.html#SP7">&#167;7</a>, <a href="2-wrk.html#SP8">&#167;8</a><br/>Extension Services - <a href="5-es.html#SP2">&#167;2</a><br/>Source Text - <a href="6-st.html#SP4">&#167;4</a><br/>Individual Pages - <a href="7-ip2.html#SP2_1_1">&#167;2.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Works::is_standard_rules</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">Works::is_standard_rules</span></span>:<br/><a href="2-wrk.html#SP7">&#167;7</a>, <a href="2-wrk.html#SP8">&#167;8</a><br/>Extension Services - <a href="5-es.html#SP2">&#167;2</a><br/>Source Text - <a href="6-st.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">a_work_for_standard_rules</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">a_work_for_standard_rules</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-wrk.html#SP2" class="function-link"><span class="function-syntax">Works::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">extension_genre</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Standard Rules"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Graham Nelson"</span><span class="plain-syntax">);</span>
@ -335,7 +335,7 @@ each extension's page is generated from its <span class="extract"><span class="e
<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>
</pre>
<ul class="endnotetexts"><li>The function Works::escape_apostrophes is used in Index Pages (<a href="7-ip.html#SP1_2_2_4_4_1">&#167;1.2.2.4.4.1</a>), The Report (<a href="7-tr.html#SP2_4_2_1">&#167;2.4.2.1</a>).</li></ul>
<ul class="endnotetexts"><li>The function Works::escape_apostrophes is used in Extensions Index Page (<a href="7-eip.html#SP1_2_2_4_4_1">&#167;1.2.2.4.4.1</a>), The Installer (<a href="7-ti.html#SP2_4_2_1">&#167;2.4.2.1</a>).</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-gnr.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-gnr.html">gnr</a></li><li class="progresscurrent">wrk</li><li class="progresssection"><a href="2-edt.html">edt</a></li><li class="progresssection"><a href="2-cps.html">cps</a></li><li class="progresssection"><a href="2-ce.html">ce</a></li><li class="progresssection"><a href="2-rqr.html">rqr</a></li><li class="progresssection"><a href="2-nst.html">nst</a></li><li class="progresssection"><a href="2-rgs.html">rgs</a></li><li class="progresssection"><a href="2-jm.html">jm</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresschapter"><a href="7-tm.html">7</a></li><li class="progressnext"><a href="2-edt.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -111,7 +111,7 @@ compiled, is a file vertex.
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure build_vertex is accessed in 1/sm, 3/ib, 3/bs2, 3/is, 3/is3, 3/is4, 4/em, 5/es, 5/ks, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 7/ip, 7/ip2, 7/tr and here.</li></ul>
<ul class="endnotetexts"><li>The structure build_vertex is accessed in 1/sm, 3/ib, 3/bs2, 3/is, 3/is3, 3/is4, 4/em, 5/es, 5/ks, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 7/tm, 7/eip, 7/ti, 7/dt, 7/dc, 7/dr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. Creation. </b>First, the three colours of vertex.
</p>
@ -275,7 +275,7 @@ vertex: it's used by the Inbuild command <span class="extract"><span class="extr
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">unique_graph_scan_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Graphs::get_unique_graph_scan_count</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Graphs::get_unique_graph_scan_count</span></span>:<br/>Index Pages - <a href="7-ip.html#SP6">&#167;6</a><br/>The Report - <a href="7-tr.html#SP2_5_1">&#167;2.5.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Graphs::get_unique_graph_scan_count</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Graphs::get_unique_graph_scan_count</span></span>:<br/>Extensions Index Page - <a href="7-eip.html#SP6">&#167;6</a><br/>The Installer - <a href="7-ti.html#SP2_5_1">&#167;2.5.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">unique_graph_scan_count</span><span class="plain-syntax">++;</span>
<span class="plain-syntax">}</span>

View file

@ -90,7 +90,7 @@ specified an explicit path at the command line.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">build_methodology</span><span class="plain-syntax"> *</span><span class="function-syntax">BuildMethodology::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">BuildMethodology::new</span></span>:<br/><a href="3-bm.html#SP3">&#167;3</a><br/>The Report - <a href="7-tr.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tools_path</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tangled</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">meth</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">build_methodology</span><span class="plain-syntax"> *</span><span class="function-syntax">BuildMethodology::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">BuildMethodology::new</span></span>:<br/><a href="3-bm.html#SP3">&#167;3</a><br/>The Installer - <a href="7-ti.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tools_path</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tangled</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">meth</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">build_methodology</span><span class="plain-syntax"> *</span><span class="identifier-syntax">BM</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">build_methodology</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BM</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">methodology</span><span class="plain-syntax"> = </span><span class="identifier-syntax">meth</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inter_path</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tools_path</span><span class="plain-syntax">;</span>

View file

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

View file

@ -134,7 +134,7 @@ which stores data about extensions used by the Inform compiler.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">) == </span><span class="character-syntax">'.'</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::put</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="character-syntax">'_'</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">new_name</span><span class="plain-syntax">, </span><span class="string-syntax">"%S-v%S.i7xd"</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_version</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-es.html#SP21" class="function-link"><span class="function-syntax">Extensions::rename_directory</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_name</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-es.html#SP22" class="function-link"><span class="function-syntax">Extensions::rename_directory</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_name</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">key</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">key</span><span class="plain-syntax">, </span><span class="string-syntax">"%p"</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">apparent_V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version</span><span class="plain-syntax">;</span>
@ -493,7 +493,7 @@ directory, we need to <span class="extract"><span class="extract-syntax">rsync</
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionBundleManager::pathname_in_nest</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">ExtensionBundleManager::pathname_in_nest</span></span>:<br/>The Report - <a href="7-tr.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionBundleManager::pathname_in_nest</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">ExtensionBundleManager::pathname_in_nest</span></span>:<br/>The Installer - <a href="7-ti.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-edt.html#SP2" class="function-link"><span class="function-syntax">Editions::write_canonical_leaf</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><a href="4-ebm.html#SP2" class="function-link"><span class="function-syntax">ExtensionBundleManager::path_within_nest</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">), </span><span class="identifier-syntax">leaf</span><span class="plain-syntax">);</span>

View file

@ -97,7 +97,7 @@ later on, as needed, just for extensions of interest: see below.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionManager::path_within_nest</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">ExtensionManager::path_within_nest</span></span>:<br/><a href="4-em.html#SP6">&#167;6</a>, <a href="4-em.html#SP7">&#167;7</a><br/>Extension Bundle Manager - <a href="4-ebm.html#SP6">&#167;6</a><br/>Index Pages - <a href="7-ip.html#SP1_2_2_4_4_3">&#167;1.2.2.4.4.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionManager::path_within_nest</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">ExtensionManager::path_within_nest</span></span>:<br/><a href="4-em.html#SP6">&#167;6</a>, <a href="4-em.html#SP7">&#167;7</a><br/>Extension Bundle Manager - <a href="4-ebm.html#SP6">&#167;6</a><br/>Extensions Index Page - <a href="7-eip.html#SP1_2_2_4_4_3">&#167;1.2.2.4.4.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no nest"</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">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">location</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Extensions"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
@ -244,7 +244,7 @@ since an extension is a single file; to sync, we just overwrite.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionManager::filename_in_nest</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">ExtensionManager::filename_in_nest</span></span>:<br/>The Report - <a href="7-tr.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionManager::filename_in_nest</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">ExtensionManager::filename_in_nest</span></span>:<br/>The Installer - <a href="7-ti.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">EX</span><span class="plain-syntax"> = </span><a href="4-em.html#SP3" class="function-link"><span class="function-syntax">ExtensionManager::path_within_nest</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-edt.html#SP2" class="function-link"><span class="function-syntax">Editions::write_canonical_leaf</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>

View file

@ -21,7 +21,6 @@ function togglePopup(material_id) {
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Preform-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
@ -60,7 +59,7 @@ function togglePopup(material_id) {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inbuildn.html">Inbuild Modules</a></li><li><a href="index.html">supervisor</a></li><li><a href="index.html#5">Chapter 5: Genre Services</a></li><li><b>Extension Services</b></li></ul></div>
<p class="purpose">Behaviour specific to copies of the extension genre.</p>
<ul class="toc"><li><a href="5-es.html#SP1">&#167;1. Scanning metadata</a></li><li><a href="5-es.html#SP5">&#167;5. Cached metadata</a></li><li><a href="5-es.html#SP6">&#167;6. Search list</a></li><li><a href="5-es.html#SP8">&#167;8. Language element activation</a></li><li><a href="5-es.html#SP9">&#167;9. Graph</a></li><li><a href="5-es.html#SP10">&#167;10. Read source text</a></li><li><a href="5-es.html#SP13">&#167;13. Miscellaneous</a></li><li><a href="5-es.html#SP19">&#167;19. Version requirements</a></li><li><a href="5-es.html#SP21">&#167;21. File hierarchy tidying</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="5-es.html#SP1">&#167;1. Scanning metadata</a></li><li><a href="5-es.html#SP5">&#167;5. Cached metadata</a></li><li><a href="5-es.html#SP6">&#167;6. Search list</a></li><li><a href="5-es.html#SP8">&#167;8. Language element activation</a></li><li><a href="5-es.html#SP9">&#167;9. Graph</a></li><li><a href="5-es.html#SP10">&#167;10. Read source text</a></li><li><a href="5-es.html#SP14">&#167;14. Miscellaneous</a></li><li><a href="5-es.html#SP20">&#167;20. Version requirements</a></li><li><a href="5-es.html#SP22">&#167;22. File hierarchy tidying</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Scanning metadata. </b>An extension has a title and an author name, each of which is limited in
length to one character less than the following constants:
@ -74,7 +73,7 @@ length to one character less than the following constants:
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">as_copy</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">body_text</span><span class="plain-syntax">; </span><span class="comment-syntax"> Body of source text supplied in extension, if any</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">body_text_unbroken</span><span class="plain-syntax">; </span><span class="comment-syntax"> Does this contain text waiting to be sentence-broken?</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">documentation_text</span><span class="plain-syntax">; </span><span class="comment-syntax"> Documentation supplied in extension, if any</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">documentation</span><span class="plain-syntax">; </span><span class="comment-syntax"> or </span><span class="extract"><span class="extract-syntax">NULL</span></span><span class="comment-syntax"> if none supplied</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">documentation_sought</span><span class="plain-syntax">; </span><span class="comment-syntax"> Has it yet been looked for?</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">standard</span><span class="plain-syntax">; </span><span class="comment-syntax"> the (or perhaps just a) Standard Rules extension</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">authorial_modesty</span><span class="plain-syntax">; </span><span class="comment-syntax"> Do not credit in the compiled game</span>
@ -97,7 +96,7 @@ length to one character less than the following constants:
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure inform_extension is accessed in 1/sm, 3/bg, 3/ib, 3/is3, 4/em, 5/ks, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 7/ip, 7/ip2, 7/tr and here.</li></ul>
<ul class="endnotetexts"><li>The structure inform_extension is accessed in 1/sm, 3/bg, 3/ib, 3/is3, 4/em, 5/ks, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 7/tm, 7/eip, 7/ti, 7/dc, 7/dr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>This is called as soon as a new copy <span class="extract"><span class="extract-syntax">C</span></span> of the extension genre is created.
We scan the extension file for the title, author, version number and any
compatibility notes given (such as "for Glulx only").
@ -139,7 +138,7 @@ compatibility notes given (such as "for Glulx only").
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body_text_unbroken</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">documentation_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">documentation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">documentation_sought</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">standard</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">authorial_modesty</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
@ -195,7 +194,7 @@ alone, and the version number is returned.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::ne_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">correct_leafname</span><span class="plain-syntax">, </span><span class="identifier-syntax">Filenames::get_leafname</span><span class="plain-syntax">(</span><span class="identifier-syntax">extension_source_filename</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">allow</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">repair_mode</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><a href="5-es.html#SP21" class="function-link"><span class="function-syntax">Extensions::rename_file</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">extension_source_filename</span><span class="plain-syntax">, </span><span class="identifier-syntax">correct_leafname</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> (</span><a href="5-es.html#SP22" class="function-link"><span class="function-syntax">Extensions::rename_file</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">extension_source_filename</span><span class="plain-syntax">, </span><span class="identifier-syntax">correct_leafname</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">allow</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">allow</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
@ -732,7 +731,7 @@ in a minimal sort of way, with just an <span class="extract"><span class="extrac
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="function-syntax">Extensions::from_copy</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">Extensions::from_copy</span></span>:<br/><a href="5-es.html#SP12">&#167;12</a><br/>Language Services - <a href="5-ls.html#SP10">&#167;10</a><br/>Project Services - <a href="5-ps2.html#SP35">&#167;35</a><br/>Source Text - <a href="6-st.html#SP13">&#167;13</a><br/>Inclusions - <a href="6-inc.html#SP6_1">&#167;6.1</a><br/>The Mini-Website - <a href="7-tm.html#SP2">&#167;2</a><br/>Index Pages - <a href="7-ip.html#SP1_2_2_4_4_1">&#167;1.2.2.4.4.1</a>, <a href="7-ip.html#SP1_2_2_4_4_4">&#167;1.2.2.4.4.4</a>, <a href="7-ip.html#SP1_2_2_4_5">&#167;1.2.2.4.5</a>, <a href="7-ip.html#SP7">&#167;7</a><br/>The Report - <a href="7-tr.html#SP2_4_1">&#167;2.4.1</a>, <a href="7-tr.html#SP2_4_2">&#167;2.4.2</a>, <a href="7-tr.html#SP2_4_2_1">&#167;2.4.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="function-syntax">Extensions::from_copy</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">Extensions::from_copy</span></span>:<br/><a href="5-es.html#SP13">&#167;13</a><br/>Language Services - <a href="5-ls.html#SP10">&#167;10</a><br/>Project Services - <a href="5-ps2.html#SP35">&#167;35</a><br/>Source Text - <a href="6-st.html#SP13">&#167;13</a><br/>Inclusions - <a href="6-inc.html#SP6_1">&#167;6.1</a><br/>The Mini-Website - <a href="7-tm.html#SP2">&#167;2</a><br/>Extensions Index Page - <a href="7-eip.html#SP1_2_2_4_4_1">&#167;1.2.2.4.4.1</a>, <a href="7-eip.html#SP1_2_2_4_4_4">&#167;1.2.2.4.4.4</a>, <a href="7-eip.html#SP1_2_2_4_5">&#167;1.2.2.4.5</a>, <a href="7-eip.html#SP7">&#167;7</a><br/>The Installer - <a href="7-ti.html#SP2_4_1">&#167;2.4.1</a>, <a href="7-ti.html#SP2_4_2">&#167;2.4.2</a>, <a href="7-ti.html#SP2_4_2_1">&#167;2.4.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ext</span><span class="plain-syntax"> = </span><a href="4-ebm.html#SP3" class="function-link"><span class="function-syntax">ExtensionBundleManager::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ext</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">ext</span><span class="plain-syntax"> = </span><a href="4-em.html#SP4" class="function-link"><span class="function-syntax">ExtensionManager::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">ext</span><span class="plain-syntax">;</span>
@ -813,7 +812,7 @@ in a minimal sort of way, with just an <span class="extract"><span class="extrac
<span class="plain-syntax"> </span><span class="identifier-syntax">E1</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version</span><span class="plain-syntax">, </span><span class="identifier-syntax">E2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::compare_by_author</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Extensions::compare_by_author</span></span>:<br/>Index Pages - <a href="7-ip.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E2</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::compare_by_author</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Extensions::compare_by_author</span></span>:<br/>Extensions Index Page - <a href="7-eip.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E2</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">E1</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">E2</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"bad work match"</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">d</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::cmp</span><span class="plain-syntax">(</span><span class="identifier-syntax">E2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">author_name</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E1</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">author_name</span><span class="plain-syntax">);</span>
@ -821,7 +820,7 @@ in a minimal sort of way, with just an <span class="extract"><span class="extrac
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-es.html#SP5" class="function-link"><span class="function-syntax">Extensions::compare_by_edition</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="identifier-syntax">E2</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::compare_by_title</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Extensions::compare_by_title</span></span>:<br/>Index Pages - <a href="7-ip.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E2</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::compare_by_title</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Extensions::compare_by_title</span></span>:<br/>Extensions Index Page - <a href="7-eip.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E1</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E2</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">E1</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">E2</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"bad work match"</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">d</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::cmp</span><span class="plain-syntax">(</span><span class="identifier-syntax">E2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E1</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">);</span>
@ -956,6 +955,9 @@ This is that time.
<span class="plain-syntax"> </span><span class="identifier-syntax">SVEXPLAIN</span><span class="plain-syntax">(1, </span><span class="string-syntax">"(from %f)\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</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">synopsis</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">read_into_file</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">documentation</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="7-dc.html#SP2" class="function-link"><span class="function-syntax">DocumentationCompiler::compile</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TextFromFiles::torn_off_documentation</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">read_into_file</span><span class="plain-syntax">), </span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">read_into_file</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">your_ref</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_inbuild_copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-es.html#SP10_2" class="named-paragraph-link"><span class="named-paragraph">Break the text into sentences</span><span class="named-paragraph-number">10.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">body_text_unbroken</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
@ -1000,8 +1002,8 @@ then its sentences will go to the extension's own tree.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">EXW</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">text_read</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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">EXW</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-es.html#SP10_2_2" class="named-paragraph-link"><span class="named-paragraph">Break the extension's text into body and documentation</span><span class="named-paragraph-number">10.2.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EXW</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body_text_unbroken</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="comment-syntax"> mark this to be sentence-broken</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">project</span><span class="plain-syntax"> = </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">read_into_project</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">project</span><span class="plain-syntax">) </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">syntax_tree</span><span class="plain-syntax"> = </span><span class="identifier-syntax">project</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">syntax_tree</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Sentences::break_into_extension_copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">syntax_tree</span><span class="plain-syntax">,</span>
@ -1009,37 +1011,12 @@ then its sentences will go to the extension's own tree.
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body_text_unbroken</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-es.html#SP10">&#167;10</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10_2_1" class="paragraph-anchor"></a><b>&#167;10.2.1. </b>If an extension file contains the special text (outside literal mode) of
<span class="extract"><span class="extract-syntax">---- Documentation ----</span></span> then this is taken as the end of the Inform source,
and the beginning of a snippet of documentation about the extension; text from
that point on is saved until later, but not broken into sentences for the
parse tree, and it is therefore invisible to the rest of Inform. If this
division line is not present then the extension contains only body source
and no documentation.
</p>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;extension-body&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">----</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">documentation</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">----</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { TRUE, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { FALSE, - }</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP10_2_2" class="paragraph-anchor"></a><b>&#167;10.2.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Break the extension's text into body and documentation</span><span class="named-paragraph-number">10.2.2</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="function-syntax">&lt;extension-body&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">EXW</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;extension-body&gt;</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">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;&lt;r&gt;&gt;</span><span class="plain-syntax">) </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">documentation_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;extension-body&gt;</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">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body_text_unbroken</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="comment-syntax"> mark this to be sentence-broken</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-es.html#SP10_2">&#167;10.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>In directory extensions, documentation can be stored separately:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::get_documentation_text</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">Extensions::get_documentation_text</span></span>:<br/>Individual Pages - <a href="7-ip2.html#SP2_1_1_5">&#167;2.1.1.5</a>, <a href="7-ip2.html#SP2_1_1_6">&#167;2.1.1.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="function-syntax">Extensions::get_documentation</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">Extensions::get_documentation</span></span>:<br/>The Mini-Website - <a href="7-tm.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="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><a href="2-cps.html#SP7" class="function-link"><span class="function-syntax">Copies::get_source_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">); </span><span class="comment-syntax"> in the unlikely event this has not happened yet</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">documentation_sought</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">location_if_path</span><span class="plain-syntax">) {</span>
@ -1049,34 +1026,44 @@ and no documentation.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">documentation_sought</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">documentation_text</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">documentation</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP11_1" class="paragraph-anchor"></a><b>&#167;11.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Fetch wording from stand-alone file</span><span class="named-paragraph-number">11.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">documentation_text</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">documentation</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">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">"this extension provides documentation both as a file and in its source"</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">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">EXT_MISWORDED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">error_text</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax"> = </span><a href="6-st.html#SP3" class="function-link"><span class="function-syntax">SourceText::for_documentation_only</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">source_file</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sf</span><span class="plain-syntax"> = </span><a href="6-st.html#SP3" class="function-link"><span class="function-syntax">SourceText::read_file</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sf</span><span class="plain-syntax">) </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">documentation_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">sf</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">text_read</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="6-st.html#SP3" class="function-link"><span class="function-syntax">SourceText::for_documentation_only</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">temp</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TextFiles::read</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"unable to read file of extension documentation"</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><a href="5-es.html#SP12" class="function-link"><span class="function-syntax">Extensions::read_extension_file_helper</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">temp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">documentation</span><span class="plain-syntax"> = </span><a href="7-dc.html#SP2" class="function-link"><span class="function-syntax">DocumentationCompiler::compile</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">temp</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">temp</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-es.html#SP11">&#167;11</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. </b>When the extension source text was read from its <span class="extract"><span class="extract-syntax">source_file</span></span>, we
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::read_extension_file_helper</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Extensions::read_extension_file_helper</span></span>:<br/><a href="5-es.html#SP11_1">&#167;11.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">v_state</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">contents</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">v_state</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">contents</span><span class="plain-syntax">, </span><span class="string-syntax">"%S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">text</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. </b>When the extension source text was read from its <span class="extract"><span class="extract-syntax">source_file</span></span>, we
attached a reference to say which <span class="extract"><span class="extract-syntax">inform_extension</span></span> it was, and here we
make use of that:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="function-syntax">Extensions::corresponding_to</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Extensions::corresponding_to</span></span>:<br/>Source Text - <a href="6-st.html#SP4">&#167;4</a>, <a href="6-st.html#SP5">&#167;5</a><br/>Headings - <a href="6-hdn.html#SP18">&#167;18</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">source_file</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sf</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="function-syntax">Extensions::corresponding_to</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Extensions::corresponding_to</span></span>:<br/>Source Text - <a href="6-st.html#SP4">&#167;4</a>, <a href="6-st.html#SP5">&#167;5</a><br/>Headings - <a href="6-hdn.html#SP18">&#167;18</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">source_file</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sf</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">sf</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_inbuild_copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">sf</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">your_ref</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="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
@ -1084,7 +1071,7 @@ make use of that:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. Miscellaneous. </b></p>
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. Miscellaneous. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::write</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
@ -1100,7 +1087,7 @@ make use of that:
<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">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">raw_author_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. </b>Three pieces of information will be set later on, by other parts of Inform
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. </b>Three pieces of information will be set later on, by other parts of Inform
calling the routines below.
</p>
@ -1118,12 +1105,12 @@ that happens, the following function will be called to set the rubric.
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">EXTENSIONS_CENSUS</span><span class="plain-syntax">, </span><span class="string-syntax">"Extension rubric: %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">rubric_as_lexed</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Extensions::get_rubric</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Extensions::get_rubric</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1_2_2_4_4_4">&#167;1.2.2.4.4.4</a>, <a href="7-ip.html#SP1_2_2_4_5">&#167;1.2.2.4.5</a><br/>The Report - <a href="7-tr.html#SP2_4_1">&#167;2.4.1</a>, <a href="7-tr.html#SP2_4_2">&#167;2.4.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Extensions::get_rubric</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">Extensions::get_rubric</span></span>:<br/>Extensions Index Page - <a href="7-eip.html#SP1_2_2_4_4_4">&#167;1.2.2.4.4.4</a>, <a href="7-eip.html#SP1_2_2_4_5">&#167;1.2.2.4.5</a><br/>The Installer - <a href="7-ti.html#SP2_4_1">&#167;2.4.1</a>, <a href="7-ti.html#SP2_4_2">&#167;2.4.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">rubric_as_lexed</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. </b>The optional extra credit line is used to acknowledge I6 sources,
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>&#167;16. </b>The optional extra credit line is used to acknowledge I6 sources,
collaborators, translators and so on.
</p>
@ -1134,7 +1121,7 @@ collaborators, translators and so on.
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">EXTENSIONS_CENSUS</span><span class="plain-syntax">, </span><span class="string-syntax">"Extension extra credit: %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">extra_credit_as_lexed</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>&#167;16. </b>The use option "authorial modesty" is unusual in applying to the extension
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>&#167;17. </b>The use option "authorial modesty" is unusual in applying to the extension
it is found in, not the whole source text. When we read it, we call one of
the following routines, depending on whether it was in an extension or in
the main source text:
@ -1150,21 +1137,21 @@ the main source text:
<span class="plain-syntax"> </span><span class="identifier-syntax">general_authorial_modesty</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>&#167;17. </b>The inclusion sentence for an extension is where it was Included in a
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>&#167;18. </b>The inclusion sentence for an extension is where it was Included in a
project's syntax tree (if it was). It isn't used in compilation, only for
problem messages and the index.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::set_inclusion_sentence</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">Extensions::set_inclusion_sentence</span></span>:<br/>Inclusions - <a href="6-inc.html#SP6_1">&#167;6.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::set_inclusion_sentence</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">Extensions::set_inclusion_sentence</span></span>:<br/>Inclusions - <a href="6-inc.html#SP6_1">&#167;6.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">inclusion_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">N</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Extensions::get_inclusion_sentence</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">Extensions::get_inclusion_sentence</span></span>:<br/>Project Services - <a href="5-ps2.html#SP35">&#167;35</a><br/>Inclusions - <a href="6-inc.html#SP6_1_1">&#167;6.1.1</a><br/>Index Pages - <a href="7-ip.html#SP1_2_2_4_4_1">&#167;1.2.2.4.4.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Extensions::get_inclusion_sentence</span><button class="popup" onclick="togglePopup('usagePopup19')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup19">Usage of <span class="code-font"><span class="function-syntax">Extensions::get_inclusion_sentence</span></span>:<br/>Project Services - <a href="5-ps2.html#SP35">&#167;35</a><br/>Inclusions - <a href="6-inc.html#SP6_1_1">&#167;6.1.1</a><br/>Extensions Index Page - <a href="7-eip.html#SP1_2_2_4_4_1">&#167;1.2.2.4.4.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">inclusion_sentence</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>&#167;18. </b>An extension is "standard" if it's either the Standard Rules or Basic Inform.
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. </b>An extension is "standard" if it's either the Standard Rules or Basic Inform.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1173,33 +1160,33 @@ problem messages and the index.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">standard</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. Version requirements. </b>When it's known that an extension must satisfy a given version requirement &mdash;
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>&#167;20. Version requirements. </b>When it's known that an extension must satisfy a given version requirement &mdash;
say, being version 7.2.1 or better &mdash; the following is called. Note that
if incompatible requirements are placed on it, the range in <span class="extract"><span class="extract-syntax">E-&gt;must_satisfy</span></span>
becomes empty and stays that way.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::must_satisfy</span><button class="popup" onclick="togglePopup('usagePopup19')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup19">Usage of <span class="code-font"><span class="function-syntax">Extensions::must_satisfy</span></span>:<br/>Inclusions - <a href="6-inc.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::must_satisfy</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">Extensions::must_satisfy</span></span>:<br/>Inclusions - <a href="6-inc.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">must_satisfy</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">must_satisfy</span><span class="plain-syntax"> = </span><span class="identifier-syntax">req</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">VersionNumberRanges::intersect_range</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">must_satisfy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version_range</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version_range</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>&#167;20. </b>And it is certainly possible, if an extension is loaded for multiple
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. </b>And it is certainly possible, if an extension is loaded for multiple
reasons with different versioning needs, that the extension no longer meets
its requirements (even though it did when first loaded). This tests for that:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::satisfies</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">Extensions::satisfies</span></span>:<br/>Project Services - <a href="5-ps2.html#SP35">&#167;35</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::satisfies</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">Extensions::satisfies</span></span>:<br/>Project Services - <a href="5-ps2.html#SP35">&#167;35</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-rqr.html#SP7" class="function-link"><span class="function-syntax">Requirements::meets</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">must_satisfy</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. File hierarchy tidying. </b></p>
<p class="commentary firstcommentary"><a id="SP22" class="paragraph-anchor"></a><b>&#167;22. File hierarchy tidying. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::rename_directory</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">Extensions::rename_directory</span></span>:<br/>Extension Bundle Manager - <a href="4-ebm.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_name</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::rename_directory</span><button class="popup" onclick="togglePopup('usagePopup22')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup22">Usage of <span class="code-font"><span class="function-syntax">Extensions::rename_directory</span></span>:<br/>Extension Bundle Manager - <a href="4-ebm.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_name</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">task</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">task</span><span class="plain-syntax">, </span><span class="string-syntax">"(Changing directory name '%p' to '%S')\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_name</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">rv</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Directories::rename</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_name</span><span class="plain-syntax">);</span>
@ -1207,7 +1194,7 @@ its requirements (even though it did when first loaded). This tests for that:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">rv</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::rename_file</span><button class="popup" onclick="togglePopup('usagePopup22')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup22">Usage of <span class="code-font"><span class="function-syntax">Extensions::rename_file</span></span>:<br/><a href="5-es.html#SP2_2">&#167;2.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_name</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::rename_file</span><button class="popup" onclick="togglePopup('usagePopup23')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup23">Usage of <span class="code-font"><span class="function-syntax">Extensions::rename_file</span></span>:<br/><a href="5-es.html#SP2_2">&#167;2.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_name</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">task</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">task</span><span class="plain-syntax">, </span><span class="string-syntax">"(Changing file name '%f' to '%S')\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_name</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">rv</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::rename</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_name</span><span class="plain-syntax">);</span>

View file

@ -100,7 +100,7 @@ module of <span class="extract"><span class="extract-syntax">inform7</span></spa
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inform_kit</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure inform_kit is accessed in 1/sm, 3/bg, 3/ib, 3/is3, 4/em, 5/es, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 7/ip, 7/ip2, 7/tr and here.</li></ul>
<ul class="endnotetexts"><li>The structure inform_kit is accessed in 1/sm, 3/bg, 3/ib, 3/is3, 4/em, 5/es, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 7/tm, 7/eip, 7/ti, 7/dc, 7/dr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>Kits come with an "if this then that" service for including other kits,
and we represent rules with the following:
</p>

View file

@ -21,7 +21,6 @@ function togglePopup(material_id) {
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Preform-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
@ -90,7 +89,7 @@ small resource folder called its "bundle". (This includes English.)
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure inform_language is accessed in 1/sm, 3/bg, 3/ib, 3/is3, 4/em, 5/es, 5/ks, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 7/ip, 7/ip2, 7/tr and here.</li></ul>
<ul class="endnotetexts"><li>The structure inform_language is accessed in 1/sm, 3/bg, 3/ib, 3/is3, 4/em, 5/es, 5/ks, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 7/tm, 7/eip, 7/ti, 7/dc, 7/dr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>This is called as soon as a new copy <span class="extract"><span class="extract-syntax">C</span></span> of the language genre is created.
</p>
@ -335,18 +334,17 @@ name of a language: for example, "French". Unlike the above functions, it
looks only at languages already loaded, and doesn't scan nests for more.
</p>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;natural-language&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">internal</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">inform_language</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">L</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">LOOP_OVER</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">L</span><span class="Preform-plain-syntax">, </span><span class="Preform-reserved-syntax">inform_language</span><span class="Preform-plain-syntax">)</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">Wordings::match</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">Wordings::first_word</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">L</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">instance_name</span><span class="Preform-plain-syntax">))) {</span>
<span class="Preform-plain-syntax"> ==&gt; { -, </span><span class="Preform-identifier-syntax">L</span><span class="Preform-plain-syntax"> };</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> }</span>
<span class="Preform-plain-syntax"> ==&gt; { </span><span class="Preform-identifier-syntax">fail</span><span class="Preform-plain-syntax"> };</span>
<span class="Preform-plain-syntax">}</span>
<pre class="displayed-code all-displayed-code code-font">
<span class="function-syntax">&lt;natural-language&gt;</span><span class="plain-syntax"> </span><span class="identifier-syntax">internal</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::match</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wordings::first_word</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">instance_name</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> ==&gt; { -, </span><span class="identifier-syntax">L</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"> ==&gt; { </span><span class="identifier-syntax">fail</span><span class="plain-syntax"> };</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="5-ks.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-es.html">es</a></li><li class="progresssection"><a href="5-ks.html">ks</a></li><li class="progresscurrent">ls</li><li class="progresssection"><a href="5-ps.html">ps</a></li><li class="progresssection"><a href="5-ps2.html">ps2</a></li><li class="progresssection"><a href="5-ts.html">ts</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresschapter"><a href="7-tm.html">7</a></li><li class="progressnext"><a href="5-ps.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -72,7 +72,7 @@ in the following structure.
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inform_pipeline</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure inform_pipeline is accessed in 1/sm, 2/edt, 2/cps, 2/rqr, 2/nst, 2/jm, 3/bg, 3/ib, 3/is3, 4/em, 4/ebm, 5/es, 5/ks, 5/ls, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 6/vmg, 7/ip, 7/ip2, 7/tr and here.</li></ul>
<ul class="endnotetexts"><li>The structure inform_pipeline is accessed in 1/sm, 2/edt, 2/cps, 2/rqr, 2/nst, 2/jm, 3/bg, 3/ib, 3/is3, 4/em, 4/ebm, 5/es, 5/ks, 5/ls, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 6/vmg, 7/tm, 7/eip, 7/ti, 7/dc, 7/dr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>This is called as soon as a new copy <span class="extract"><span class="extract-syntax">C</span></span> of the language genre is created.
</p>

View file

@ -94,7 +94,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inform_project</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure inform_project is accessed in 1/sm, 2/edt, 2/cps, 2/rqr, 2/nst, 2/jm, 3/bg, 3/ib, 3/is3, 4/em, 4/ebm, 4/pbm, 4/pfm, 5/es, 5/ks, 5/ls, 5/ps, 5/ts, 6/st, 6/hdn, 6/inc, 6/vmg, 7/tm, 7/ip, 7/ip2, 7/tr and here.</li></ul>
<ul class="endnotetexts"><li>The structure inform_project is accessed in 1/sm, 2/edt, 2/cps, 2/rqr, 2/nst, 2/jm, 3/bg, 3/ib, 3/is3, 4/em, 4/ebm, 4/pbm, 4/pfm, 5/es, 5/ks, 5/ls, 5/ps, 5/ts, 6/st, 6/hdn, 6/inc, 6/vmg, 7/tm, 7/eip, 7/ti, 7/dc, 7/dr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>This is called as soon as a new copy <span class="extract"><span class="extract-syntax">C</span></span> of the language genre is created.
It doesn't actually do any scanning to speak of, in fact: we may eventually
learn a lot about the project, but for now we simply initialise to bland
@ -291,12 +291,12 @@ is small, but one likes to minimise the effect of the CWD.)
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="1-ic.html#SP19" class="function-link"><span class="function-syntax">Supervisor::transient</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="function-syntax">Projects::materials_nest</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Projects::materials_nest</span></span>:<br/><a href="5-ps2.html#SP39">&#167;39</a><br/>Index Pages - <a href="7-ip.html#SP1_1">&#167;1.1</a>, <a href="7-ip.html#SP1_2_1">&#167;1.2.1</a><br/>The Report - <a href="7-tr.html#SP2_4_4">&#167;2.4.4</a>, <a href="7-tr.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="function-syntax">Projects::materials_nest</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Projects::materials_nest</span></span>:<br/><a href="5-ps2.html#SP39">&#167;39</a><br/>Extensions Index Page - <a href="7-eip.html#SP1_1">&#167;1.1</a>, <a href="7-eip.html#SP1_2_1">&#167;1.2.1</a><br/>The Installer - <a href="7-ti.html#SP2_4_4">&#167;2.4.4</a>, <a href="7-ti.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</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">proj</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">materials_nest</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Projects::materials_path</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Projects::materials_path</span></span>:<br/><a href="5-ps2.html#SP11">&#167;11</a><br/>Inform7 Skill - <a href="3-is2.html#SP2">&#167;2</a><br/>Inclusions - <a href="6-inc.html#SP2_2">&#167;2.2</a><br/>The Mini-Website - <a href="7-tm.html#SP4">&#167;4</a><br/>The Report - <a href="7-tr.html#SP2_4_3">&#167;2.4.3</a>, <a href="7-tr.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Projects::materials_path</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Projects::materials_path</span></span>:<br/><a href="5-ps2.html#SP11">&#167;11</a><br/>Inform7 Skill - <a href="3-is2.html#SP2">&#167;2</a><br/>Inclusions - <a href="6-inc.html#SP2_2">&#167;2.2</a><br/>The Mini-Website - <a href="7-tm.html#SP4">&#167;4</a><br/>The Installer - <a href="7-ti.html#SP2_4_3">&#167;2.4.3</a>, <a href="7-ti.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</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">proj</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">materials_nest</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">location</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -1165,10 +1165,10 @@ each extension against the intersection of all requirements put on it:
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::check_extension_versions_d</span><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</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">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre</span><span class="plain-syntax"> == </span><span class="identifier-syntax">extension_genre</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">E</span><span class="plain-syntax"> = </span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-es.html#SP20" class="function-link"><span class="function-syntax">Extensions::satisfies</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</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="5-es.html#SP21" class="function-link"><span class="function-syntax">Extensions::satisfies</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</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">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</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">SYNTAX_CE</span><span class="plain-syntax">, </span><span class="constant-syntax">ExtVersionTooLow_SYNERROR</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"two incompatible versions"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ce.html#SP3" class="function-link"><span class="function-syntax">CopyErrors::supply_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">CE</span><span class="plain-syntax">, </span><a href="5-es.html#SP17" class="function-link"><span class="function-syntax">Extensions::get_inclusion_sentence</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-ce.html#SP3" class="function-link"><span class="function-syntax">CopyErrors::supply_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">CE</span><span class="plain-syntax">, </span><a href="5-es.html#SP18" class="function-link"><span class="function-syntax">Extensions::get_inclusion_sentence</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="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">proj</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>

View file

@ -72,7 +72,7 @@ stored in the following structure.
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inform_template</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure inform_template is accessed in 1/sm, 2/edt, 2/cps, 2/rqr, 2/nst, 2/jm, 3/bg, 3/ib, 3/is3, 4/em, 4/ebm, 5/es, 5/ks, 5/ls, 5/ps, 5/ps2, 6/st, 6/hdn, 6/inc, 6/vmg, 7/ip, 7/ip2, 7/tr and here.</li></ul>
<ul class="endnotetexts"><li>The structure inform_template is accessed in 1/sm, 2/edt, 2/cps, 2/rqr, 2/nst, 2/jm, 3/bg, 3/ib, 3/is3, 4/em, 4/ebm, 5/es, 5/ks, 5/ls, 5/ps, 5/ps2, 6/st, 6/hdn, 6/inc, 6/vmg, 7/tm, 7/eip, 7/ti, 7/dc, 7/dr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>This is called as soon as a new copy <span class="extract"><span class="extract-syntax">C</span></span> of the language genre is created.
</p>

View file

@ -257,7 +257,7 @@ on each heading in sequence:
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">heading</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure heading is accessed in 1/sm, 3/bs2, 6/inc and here.</li></ul>
<ul class="endnotetexts"><li>The structure heading is accessed in 1/sm, 3/bs2, 6/inc, 7/dt, 7/dr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>It is guaranteed that this will be called once for each heading (except the
pseudo-heading, which doesn't count) in sequence order:
</p>
@ -789,7 +789,7 @@ file and a line number of at least 1).
<span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="function-syntax">Headings::get_extension_containing</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Headings::get_extension_containing</span></span>:<br/><a href="6-hdn.html#SP22">&#167;22</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">h</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">h</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">h</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">start_location</span><span class="plain-syntax">.</span><span class="identifier-syntax">file_of_origin</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-es.html#SP12" class="function-link"><span class="function-syntax">Extensions::corresponding_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">h</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">start_location</span><span class="plain-syntax">.</span><span class="identifier-syntax">file_of_origin</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-es.html#SP13" class="function-link"><span class="function-syntax">Extensions::corresponding_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">h</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">start_location</span><span class="plain-syntax">.</span><span class="identifier-syntax">file_of_origin</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. </b>Although Implied (0) headings do have text, contrary to the implication of

View file

@ -325,7 +325,7 @@ Sausages by Mr Punch, and loaded it, but then read the sentence
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="2-rqr.html#SP7" class="function-link"><span class="function-syntax">Requirements::meets</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><a href="2-cps.html#SP7" class="function-link"><span class="function-syntax">Copies::source_text_has_been_read</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><a href="5-es.html#SP19" class="function-link"><span class="function-syntax">Extensions::must_satisfy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-es.html#SP20" class="function-link"><span class="function-syntax">Extensions::must_satisfy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-inc.html#SP6_1" class="named-paragraph-link"><span class="named-paragraph">Read the extension file into the lexer, and break it into body and documentation</span><span class="named-paragraph-number">6.1</span></a></span><span class="plain-syntax">;</span>
@ -343,7 +343,7 @@ Sausages by Mr Punch, and loaded it, but then read the sentence
<span class="plain-syntax"> </span><a href="2-nst.html#SP10" class="function-link"><span class="function-syntax">Nests::search_for_best</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><a href="5-ps2.html#SP7" class="function-link"><span class="function-syntax">Projects::nest_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">for_project</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">search_result</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">search_result</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-es.html#SP17" class="function-link"><span class="function-syntax">Extensions::set_inclusion_sentence</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">at</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-es.html#SP18" class="function-link"><span class="function-syntax">Extensions::set_inclusion_sentence</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">at</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-es.html#SP6" class="function-link"><span class="function-syntax">Extensions::set_associated_project</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">for_project</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-nst.html#SP2" class="function-link"><span class="function-syntax">Nests::get_tag</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">search_result</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nest</span><span class="plain-syntax">) == </span><span class="constant-syntax">INTERNAL_NEST_TAG</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">loaded_from_built_in_area</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
@ -378,7 +378,7 @@ report this problem at the inclusion line.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</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">SYNTAX_CE</span><span class="plain-syntax">, </span><span class="constant-syntax">ExtInadequateVM_SYNERROR</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parsed_from</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ce.html#SP3" class="function-link"><span class="function-syntax">CopyErrors::supply_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">CE</span><span class="plain-syntax">, </span><a href="5-es.html#SP17" class="function-link"><span class="function-syntax">Extensions::get_inclusion_sentence</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-ce.html#SP3" class="function-link"><span class="function-syntax">CopyErrors::supply_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">CE</span><span class="plain-syntax">, </span><a href="5-es.html#SP18" class="function-link"><span class="function-syntax">Extensions::get_inclusion_sentence</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="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">inclusions_errors_to</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="6-inc.html#SP6_1">&#167;6.1</a>.</li></ul>

View file

@ -100,13 +100,13 @@ perhaps combining our feed with that of others.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">source_reader_in_documentation_only_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">SourceText::for_documentation_only</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">SourceText::for_documentation_only</span></span>:<br/>Extension Services - <a href="5-es.html#SP11_1">&#167;11.1</a><br/>Individual Pages - <a href="7-ip2.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">SourceText::for_documentation_only</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">old_state</span><span class="plain-syntax"> = </span><span class="identifier-syntax">source_reader_in_documentation_only_mode</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">source_reader_in_documentation_only_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">state</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">old_state</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">source_file</span><span class="plain-syntax"> *</span><span class="function-syntax">SourceText::read_file</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">SourceText::read_file</span></span>:<br/>Extension Services - <a href="5-es.html#SP10">&#167;10</a>, <a href="5-es.html#SP11_1">&#167;11.1</a><br/>Project Services - <a href="5-ps2.html#SP36_2">&#167;36.2</a><br/>Inclusions - <a href="6-inc.html#SP2_2">&#167;2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">synopsis</span><span class="plain-syntax">,</span>
<span class="identifier-syntax">source_file</span><span class="plain-syntax"> *</span><span class="function-syntax">SourceText::read_file</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">SourceText::read_file</span></span>:<br/>Extension Services - <a href="5-es.html#SP10">&#167;10</a><br/>Project Services - <a href="5-ps2.html#SP36_2">&#167;36.2</a><br/>Inclusions - <a href="6-inc.html#SP2_2">&#167;2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">synopsis</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">primary</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">documentation_only</span><span class="plain-syntax"> = </span><span class="identifier-syntax">source_reader_in_documentation_only_mode</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">currently_lexing_into</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C</span><span class="plain-syntax">;</span>
@ -171,7 +171,7 @@ source files.
<span class="plain-syntax"> </span><span class="identifier-syntax">paraphrase</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"source text"</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">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">referred</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="5-es.html#SP12" class="function-link"><span class="function-syntax">Extensions::corresponding_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">referred</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="5-es.html#SP13" class="function-link"><span class="function-syntax">Extensions::corresponding_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">referred</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">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">matched_filename</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">F</span><span class="plain-syntax">;</span>
@ -202,7 +202,7 @@ source files.
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">SourceText::gloss_extension</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">source_file</span><span class="plain-syntax"> *</span><span class="identifier-syntax">referred</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">E</span><span class="plain-syntax"> = </span><a href="5-es.html#SP12" class="function-link"><span class="function-syntax">Extensions::corresponding_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">referred</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">E</span><span class="plain-syntax"> = </span><a href="5-es.html#SP13" class="function-link"><span class="function-syntax">Extensions::corresponding_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">referred</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" in the extension %X"</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>

View file

@ -0,0 +1,413 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Documentation Compiler</title>
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
<nav role="navigation">
<h1><a href="../index.html">
<img src="../docs-assets/Inform.png" height=72">
</a></h1>
<ul><li><a href="../index.html">home</a></li>
</ul><h2>Compiler</h2><ul>
<li><a href="../structure.html">structure</a></li>
<li><a href="../inbuildn.html">inbuild</a></li>
<li><a href="../inform7n.html">inform7</a></li>
<li><a href="../intern.html">inter</a></li>
<li><a href="../services.html">services</a></li>
<li><a href="../secrets.html">secrets</a></li>
</ul><h2>Other Tools</h2><ul>
<li><a href="../inblorbn.html">inblorb</a></li>
<li><a href="../indocn.html">indoc</a></li>
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>
<li><a href="../../../inweb/index.html">inweb</a></li>
<li><a href="../../../intest/index.html">intest</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'Documentation Compiler' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inbuildn.html">Inbuild Modules</a></li><li><a href="index.html">supervisor</a></li><li><a href="index.html#7">Chapter 7: Extension Indexing</a></li><li><b>Documentation Compiler</b></li></ul></div>
<p class="purpose">To compile documentation from the textual syntax in an extension into a tree.</p>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>We will actually wrap the result in the following structure, but
it's really not much more than the tree produced by <a href="7-dt.html" class="internal">Documentation Tree</a>:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">title</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">original</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">associated_extension</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">heterogeneous_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tree</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">total_headings</span><span class="plain-syntax">[3];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">total_examples</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">empty</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationCompiler::new_wrapper</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">DocumentationCompiler::new_wrapper</span></span>:<br/><a href="7-dc.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">source</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">original</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">source</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">associated_extension</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP1" class="function-link"><span class="function-syntax">DocumentationTree::new</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_examples</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[0] = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[1] = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[2] = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">empty</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure compiled_documentation is accessed in 2/wrk, 2/edt, 2/cps, 2/rqr, 2/jm, 3/bg, 3/is, 4/ebm, 4/km, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/ks, 5/ls, 5/ps2, 6/inc, 7/eip, 7/ti, 7/dr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>Off we go, then:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationCompiler::compile</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">DocumentationCompiler::compile</span></span>:<br/>Extension Services - <a href="5-es.html#SP10">&#167;10</a>, <a href="5-es.html#SP11_1">&#167;11.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">source</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">associated_extension</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SVEXPLAIN</span><span class="plain-syntax">(1, </span><span class="string-syntax">"(compiling documentation: %d chars)\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">source</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax"> = </span><a href="7-dc.html#SP1" class="function-link"><span class="function-syntax">DocumentationCompiler::new_wrapper</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">source</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">associated_extension</span><span class="plain-syntax"> = </span><span class="identifier-syntax">associated_extension</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">associated_extension</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">, </span><span class="string-syntax">"%X"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">associated_extension</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::is_whitespace</span><span class="plain-syntax">(</span><span class="identifier-syntax">source</span><span class="plain-syntax">)) </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">empty</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Parse the source</span><span class="named-paragraph-number">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">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">empty</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SVEXPLAIN</span><span class="plain-syntax">(1, </span><span class="string-syntax">"(resulting tree is empty)\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SVEXPLAIN</span><span class="plain-syntax">(1, </span><span class="string-syntax">"(resulting tree has %d chapter(s), %d section(s) and %d example(s))\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[2], </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_examples</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2_1" class="paragraph-anchor"></a><b>&#167;2.1. </b>The source material is line-based, with semantic content sometimes spreading
across multiple lines, so we'll need to keep track of some state as we read
one line at a time:
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse the source</span><span class="named-paragraph-number">2.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">chapter_number</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">section_number</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">current_headings</span><span class="plain-syntax">[4]; </span><span class="comment-syntax"> Most recent headings of levels 0, 1, 2</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_headings</span><span class="plain-syntax">[0] = </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">root</span><span class="plain-syntax">; </span><span class="comment-syntax"> This will never change</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_headings</span><span class="plain-syntax">[1] = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> Latest chapter, if any</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_headings</span><span class="plain-syntax">[2] = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> Latest section in most recent thing of lower level</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_headings</span><span class="plain-syntax">[3] = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> Latest example in most recent thing of lower level</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">current_passage</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="comment-syntax"> passage being assembled, if any</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">current_paragraph</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="comment-syntax"> paragraph being assembled, if any</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">current_code</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> code sample being assembled, if any</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pending_code_sample_blanks</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">code_is_tabular</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="comment-syntax"> used only when assembling code samples</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1" class="named-paragraph-link"><span class="named-paragraph">Parse the source linewise</span><span class="named-paragraph-number">2.1.1</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1_1" class="paragraph-anchor"></a><b>&#167;2.1.1. </b>Leading space on a line is removed but not ignored: it is converted into an
indentation level, measured as a tab count, using the exchange rate 4 spaces
to 1 tab.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse the source linewise</span><span class="named-paragraph-number">2.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">indentation</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">space_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">source</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">source</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\n'</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Line read</span><span class="named-paragraph-number">2.1.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">indentation</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">space_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Characters::is_whitespace</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\t'</span><span class="plain-syntax">) </span><span class="identifier-syntax">indentation</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">' '</span><span class="plain-syntax">) </span><span class="identifier-syntax">space_count</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">space_count</span><span class="plain-syntax"> == </span><span class="constant-syntax">4</span><span class="plain-syntax">) { </span><span class="identifier-syntax">indentation</span><span class="plain-syntax">++; </span><span class="identifier-syntax">space_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Line read</span><span class="named-paragraph-number">2.1.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Complete passage if in one</span><span class="named-paragraph-number">2.1.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">)</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP2_1">&#167;2.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1_1_1" class="paragraph-anchor"></a><b>&#167;2.1.1.1. </b>Trailing space is ignored and removed.
</p>
<p class="commentary">Lines which are unindented and take the following shapes are headings:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> Chapter: Survey and Prospecting</span>
<span class="plain-syntax"> Section: Black Gold</span>
<span class="plain-syntax"> Example: *** Gelignite Anderson - A Tale of the Texas Oilmen</span>
</pre>
<p class="commentary">where in each case the colon can equally be a hyphen, and with optional
space either side.
</p>
<p class="commentary">Otherwise, lines are divided into blanks, which always end paragraphs but
may either end or continue code samples; unindented lines, which are always
part of paragraphs; or indented ones, which are always part of code samples.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Line read</span><span class="named-paragraph-number">2.1.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::trim_white_space</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_paragraph</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_1_5" class="named-paragraph-link"><span class="named-paragraph">Complete paragraph or code</span><span class="named-paragraph-number">2.1.1.1.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_code</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_1_9" class="named-paragraph-link"><span class="named-paragraph">Insert line break in code</span><span class="named-paragraph-number">2.1.1.1.9</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">indentation</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Regexp::create_mr</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Section *: *(%c+?)"</span><span class="plain-syntax">)) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Section *- *(%c+?)"</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Insert a section heading</span><span class="named-paragraph-number">2.1.1.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Chapter *: *(%c+?)"</span><span class="plain-syntax">)) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Chapter *- *(%c+?)"</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Insert a chapter heading</span><span class="named-paragraph-number">2.1.1.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Example *: *(%**) *(%c+?)"</span><span class="plain-syntax">)) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Example *- *(%**) *(%c+?)"</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_1_3" class="named-paragraph-link"><span class="named-paragraph">Insert an example heading</span><span class="named-paragraph-number">2.1.1.1.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_paragraph</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_1_4" class="named-paragraph-link"><span class="named-paragraph">Begin paragraph</span><span class="named-paragraph-number">2.1.1.1.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_1_6" class="named-paragraph-link"><span class="named-paragraph">Insert space in paragraph</span><span class="named-paragraph-number">2.1.1.1.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_1_7" class="named-paragraph-link"><span class="named-paragraph">Insert line in paragraph</span><span class="named-paragraph-number">2.1.1.1.7</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Regexp::dispose_of</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_code</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_1_8" class="named-paragraph-link"><span class="named-paragraph">Begin code</span><span class="named-paragraph-number">2.1.1.1.8</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_1_10" class="named-paragraph-link"><span class="named-paragraph">Insert line in code sample</span><span class="named-paragraph-number">2.1.1.1.10</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP2_1_1">&#167;2.1.1</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1_1_1_1" class="paragraph-anchor"></a><b>&#167;2.1.1.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Insert a chapter heading</span><span class="named-paragraph-number">2.1.1.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Complete passage if in one</span><span class="named-paragraph-number">2.1.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">chapter_number</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">section_number</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[0] + </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[1] + </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[2];</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[1]++;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_node</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP3" class="function-link"><span class="function-syntax">DocumentationTree::new_heading</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">level</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">chapter_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">section_number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Place this new structural node in the tree</span><span class="named-paragraph-number">2.1.1.1.1.1</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP2_1_1_1">&#167;2.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1_1_1_2" class="paragraph-anchor"></a><b>&#167;2.1.1.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Insert a section heading</span><span class="named-paragraph-number">2.1.1.1.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Complete passage if in one</span><span class="named-paragraph-number">2.1.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">section_number</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[0] + </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[1] + </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[2];</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[2]++;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_node</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP3" class="function-link"><span class="function-syntax">DocumentationTree::new_heading</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">level</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">chapter_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">section_number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Place this new structural node in the tree</span><span class="named-paragraph-number">2.1.1.1.1.1</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP2_1_1_1">&#167;2.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1_1_1_3" class="paragraph-anchor"></a><b>&#167;2.1.1.1.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Insert an example heading</span><span class="named-paragraph-number">2.1.1.1.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Complete passage if in one</span><span class="named-paragraph-number">2.1.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax"> = </span><span class="constant-syntax">3</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_node</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP5" class="function-link"><span class="function-syntax">DocumentationTree::new_example</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1],</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0]), ++(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_examples</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Place this new structural node in the tree</span><span class="named-paragraph-number">2.1.1.1.1.1</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP2_1_1_1">&#167;2.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1_1_1_1_1" class="paragraph-anchor"></a><b>&#167;2.1.1.1.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Place this new structural node in the tree</span><span class="named-paragraph-number">2.1.1.1.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">j</span><span class="plain-syntax">=</span><span class="identifier-syntax">level</span><span class="plain-syntax">-1; </span><span class="identifier-syntax">j</span><span class="plain-syntax">&gt;=0; </span><span class="identifier-syntax">j</span><span class="plain-syntax">--)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_headings</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">]) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">new_node</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_headings</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_headings</span><span class="plain-syntax">[</span><span class="identifier-syntax">level</span><span class="plain-syntax">] = </span><span class="identifier-syntax">new_node</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">j</span><span class="plain-syntax">=</span><span class="identifier-syntax">level</span><span class="plain-syntax">+1; </span><span class="identifier-syntax">j</span><span class="plain-syntax">&lt;4; </span><span class="identifier-syntax">j</span><span class="plain-syntax">++) </span><span class="identifier-syntax">current_headings</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">] = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP2_1_1_1_1">&#167;2.1.1.1.1</a>, <a href="7-dc.html#SP2_1_1_1_2">&#167;2.1.1.1.2</a>, <a href="7-dc.html#SP2_1_1_1_3">&#167;2.1.1.1.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1_1_1_4_1" class="paragraph-anchor"></a><b>&#167;2.1.1.1.4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin passage if not already in one</span><span class="named-paragraph-number">2.1.1.1.4.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_passage</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_passage</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP7" class="function-link"><span class="function-syntax">DocumentationTree::new_passage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">j</span><span class="plain-syntax">=3; </span><span class="identifier-syntax">j</span><span class="plain-syntax">&gt;=0; </span><span class="identifier-syntax">j</span><span class="plain-syntax">--)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_headings</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">]) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_passage</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_headings</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_paragraph</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP2_1_1_1_4">&#167;2.1.1.1.4</a>, <a href="7-dc.html#SP2_1_1_1_8">&#167;2.1.1.1.8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1_1_2" class="paragraph-anchor"></a><b>&#167;2.1.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Complete passage if in one</span><span class="named-paragraph-number">2.1.1.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_passage</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_1_5" class="named-paragraph-link"><span class="named-paragraph">Complete paragraph or code</span><span class="named-paragraph-number">2.1.1.1.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_passage</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP2_1_1">&#167;2.1.1</a>, <a href="7-dc.html#SP2_1_1_1_1">&#167;2.1.1.1.1</a>, <a href="7-dc.html#SP2_1_1_1_2">&#167;2.1.1.1.2</a>, <a href="7-dc.html#SP2_1_1_1_3">&#167;2.1.1.1.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1_1_1_5" class="paragraph-anchor"></a><b>&#167;2.1.1.1.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Complete paragraph or code</span><span class="named-paragraph-number">2.1.1.1.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_paragraph</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_1_5_1" class="named-paragraph-link"><span class="named-paragraph">Complete paragraph</span><span class="named-paragraph-number">2.1.1.1.5.1</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_code</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_1_5_2" class="named-paragraph-link"><span class="named-paragraph">Complete code</span><span class="named-paragraph-number">2.1.1.1.5.2</span></a></span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP2_1_1_1">&#167;2.1.1.1</a>, <a href="7-dc.html#SP2_1_1_2">&#167;2.1.1.2</a>, <a href="7-dc.html#SP2_1_1_1_4">&#167;2.1.1.1.4</a>, <a href="7-dc.html#SP2_1_1_1_8">&#167;2.1.1.1.8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1_1_1_4" class="paragraph-anchor"></a><b>&#167;2.1.1.1.4. </b>Line breaks are treated as spaces in the content of a paragraph, so that
<span class="extract"><span class="extract-syntax">P-&gt;content</span></span> here can be a long text but one which contains no line breaks.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin paragraph</span><span class="named-paragraph-number">2.1.1.1.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_1_5" class="named-paragraph-link"><span class="named-paragraph">Complete paragraph or code</span><span class="named-paragraph-number">2.1.1.1.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_1_4_1" class="named-paragraph-link"><span class="named-paragraph">Begin passage if not already in one</span><span class="named-paragraph-number">2.1.1.1.4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_paragraph</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP9" class="function-link"><span class="function-syntax">DocumentationTree::new_paragraph</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_paragraph</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_passage</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP2_1_1_1">&#167;2.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1_1_1_6" class="paragraph-anchor"></a><b>&#167;2.1.1.1.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Insert space in paragraph</span><span class="named-paragraph-number">2.1.1.1.6</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_paragraph</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_paragraph</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_paragraph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">, </span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP2_1_1_1">&#167;2.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1_1_1_7" class="paragraph-anchor"></a><b>&#167;2.1.1.1.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Insert line in paragraph</span><span class="named-paragraph-number">2.1.1.1.7</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_paragraph</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_paragraph</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_paragraph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP2_1_1_1">&#167;2.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1_1_1_5_1" class="paragraph-anchor"></a><b>&#167;2.1.1.1.5.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Complete paragraph</span><span class="named-paragraph-number">2.1.1.1.5.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_paragraph</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_paragraph</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP2_1_1_1_5">&#167;2.1.1.1.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1_1_1_8" class="paragraph-anchor"></a><b>&#167;2.1.1.1.8. </b>Line breaks are more significant in code samples, of course. Blank lines
at the end of a code sample are stripped out; and they cannot appear at the start
of a code sample either, since a non-blank indented line is needed to trigger one.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin code</span><span class="named-paragraph-number">2.1.1.1.8</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_1_5" class="named-paragraph-link"><span class="named-paragraph">Complete paragraph or code</span><span class="named-paragraph-number">2.1.1.1.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dc.html#SP2_1_1_1_4_1" class="named-paragraph-link"><span class="named-paragraph">Begin passage if not already in one</span><span class="named-paragraph-number">2.1.1.1.4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">paste_me</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">) == </span><span class="character-syntax">'*'</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">) == </span><span class="character-syntax">':'</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::trim_white_space</span><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">paste_me</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_code</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP10" class="function-link"><span class="function-syntax">DocumentationTree::new_code_sample</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">paste_me</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_code</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_passage</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pending_code_sample_blanks</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">code_is_tabular</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP2_1_1_1">&#167;2.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1_1_1_9" class="paragraph-anchor"></a><b>&#167;2.1.1.1.9. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Insert line break in code</span><span class="named-paragraph-number">2.1.1.1.9</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_code</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pending_code_sample_blanks</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">code_is_tabular</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP2_1_1_1">&#167;2.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1_1_1_10" class="paragraph-anchor"></a><b>&#167;2.1.1.1.10. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Insert line in code sample</span><span class="named-paragraph-number">2.1.1.1.10</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">pending_code_sample_blanks</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><a href="7-dt.html#SP12" class="function-link"><span class="function-syntax">DocumentationTree::new_code_line</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">), </span><span class="identifier-syntax">current_code</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pending_code_sample_blanks</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Regexp::create_mr</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Table %c*"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">code_is_tabular</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Regexp::dispose_of</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::make_child</span><span class="plain-syntax">(</span><a href="7-dt.html#SP12" class="function-link"><span class="function-syntax">DocumentationTree::new_code_line</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">indentation</span><span class="plain-syntax">-1, </span><span class="identifier-syntax">code_is_tabular</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_code</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP2_1_1_1">&#167;2.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1_1_1_5_2" class="paragraph-anchor"></a><b>&#167;2.1.1.1.5.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Complete code</span><span class="named-paragraph-number">2.1.1.1.5.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_code</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_code</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">code_is_tabular</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dc.html#SP2_1_1_1_5">&#167;2.1.1.1.5</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="7-dt.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresssection"><a href="7-tm.html">tm</a></li><li class="progresssection"><a href="7-eip.html">eip</a></li><li class="progresssection"><a href="7-ti.html">ti</a></li><li class="progresssection"><a href="7-dt.html">dt</a></li><li class="progresscurrent">dc</li><li class="progresssection"><a href="7-dr.html">dr</a></li><li class="progressnext"><a href="7-dr.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>
</body>
</html>

View file

@ -0,0 +1,707 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Documentation Renderer</title>
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
<nav role="navigation">
<h1><a href="../index.html">
<img src="../docs-assets/Inform.png" height=72">
</a></h1>
<ul><li><a href="../index.html">home</a></li>
</ul><h2>Compiler</h2><ul>
<li><a href="../structure.html">structure</a></li>
<li><a href="../inbuildn.html">inbuild</a></li>
<li><a href="../inform7n.html">inform7</a></li>
<li><a href="../intern.html">inter</a></li>
<li><a href="../services.html">services</a></li>
<li><a href="../secrets.html">secrets</a></li>
</ul><h2>Other Tools</h2><ul>
<li><a href="../inblorbn.html">inblorb</a></li>
<li><a href="../indocn.html">indoc</a></li>
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>
<li><a href="../../../inweb/index.html">inweb</a></li>
<li><a href="../../../intest/index.html">intest</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'Documentation Renderer' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inbuildn.html">Inbuild Modules</a></li><li><a href="index.html">supervisor</a></li><li><a href="index.html#7">Chapter 7: Extension Indexing</a></li><li><b>Documentation Renderer</b></li></ul></div>
<p class="purpose">To render a passage of extension documentation as HTML.</p>
<ul class="toc"><li><a href="7-dr.html#SP1">&#167;1. Textual renderer</a></li><li><a href="7-dr.html#SP2">&#167;2. Website renderer</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Textual renderer. </b>This very cheap renderer can be used to debug trees for logging purposes:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::as_plain_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">heterogeneous_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"--------\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">INDENT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::traverse_from</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">root</span><span class="plain-syntax">, &amp;</span><a href="7-dr.html#SP1" class="function-link"><span class="function-syntax">DocumentationRenderer::textual_visit</span></a><span class="plain-syntax">, (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">DL</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">OUTDENT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"--------\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::textual_visit</span><span class="plain-syntax">(</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">state</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">state</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">L</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">heading_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">H</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_heading</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Heading H%d level %d: '%S - %S'\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ID</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">level</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">example_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_example</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_example</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Example %c: '%S' (%d star(s))\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">letter</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">star_count</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">passage_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Passage\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">paragraph_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_paragraph</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_paragraph</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Paragraph: %d chars\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">L</span><span class="plain-syntax">+1; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) { </span><span class="identifier-syntax">INDENT</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">L</span><span class="plain-syntax">+1; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) { </span><span class="identifier-syntax">OUTDENT</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">code_sample_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Code sample\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">code_line_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_code_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_code_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Code line: "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;E-&gt;</span><span class="element-syntax">indentation</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Unknown node\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. Website renderer. </b>We will make several HTML files, but only one at a time:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> </span><span class="identifier-syntax">DOCF_struct</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">DOCF</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationRenderer::open_subpage</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::open_subpage</span></span>:<br/><a href="7-dr.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">STDOUT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">DOCF</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"nested DC writes"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">leaf</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DOCF</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><span class="identifier-syntax">STREAM_OPEN_TO_FILE</span><span class="plain-syntax">(</span><span class="identifier-syntax">DOCF</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">UTF8_ENC</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> if we lack permissions, e.g., then write no documentation</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">DOCF</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::close_subpage</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::close_subpage</span></span>:<br/><a href="7-dr.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">DOCF</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no DC page open"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">DOCF</span><span class="plain-syntax"> != </span><span class="identifier-syntax">STDOUT</span><span class="plain-syntax">) </span><span class="identifier-syntax">STREAM_CLOSE</span><span class="plain-syntax">(</span><span class="identifier-syntax">DOCF</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DOCF</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>Our tree is turned into a tiny website, with a single index page for everything
except the examples, and then up to 26 pages holding the content of examples A to Z.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::as_HTML</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::as_HTML</span></span>:<br/>The Mini-Website - <a href="7-tm.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">extras</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cd</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="7-dr.html#SP2" class="function-link"><span class="function-syntax">DocumentationRenderer::open_subpage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"index.html"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP4" class="function-link"><span class="function-syntax">DocumentationRenderer::render_index_page</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">extras</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP2" class="function-link"><span class="function-syntax">DocumentationRenderer::close_subpage</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">eg</span><span class="plain-syntax">=1; </span><span class="identifier-syntax">eg</span><span class="function-syntax">&lt;=cd-&gt;</span><span class="element-syntax">total_examples</span><span class="plain-syntax">; </span><span class="identifier-syntax">eg</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">, </span><span class="string-syntax">"eg%d.html"</span><span class="plain-syntax">, </span><span class="identifier-syntax">eg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="7-dr.html#SP2" class="function-link"><span class="function-syntax">DocumentationRenderer::open_subpage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">leaf</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP5" class="function-link"><span class="function-syntax">DocumentationRenderer::render_example_page</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">eg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP2" class="function-link"><span class="function-syntax">DocumentationRenderer::close_subpage</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ch</span><span class="plain-syntax">=1; </span><span class="identifier-syntax">ch</span><span class="function-syntax">&lt;=cd-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[1]; </span><span class="identifier-syntax">ch</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">, </span><span class="string-syntax">"chapter%d.html"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="7-dr.html#SP2" class="function-link"><span class="function-syntax">DocumentationRenderer::open_subpage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">leaf</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP5" class="function-link"><span class="function-syntax">DocumentationRenderer::render_chapter_page</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP2" class="function-link"><span class="function-syntax">DocumentationRenderer::close_subpage</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_index_page</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_index_page</span></span>:<br/><a href="7-dr.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">extras</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP6" class="function-link"><span class="function-syntax">DocumentationRenderer::render_header</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">associated_extension</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP7" class="function-link"><span class="function-syntax">DocumentationRenderer::render_extension_details</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">associated_extension</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"hr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[1] &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="comment-syntax"> there are chapters</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::render_toc</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"em"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Click on Chapter, Section or Example numbers to read"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"em"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">root</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">passage_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"hr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"extensionsubheading\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"introduction"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">root</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">; </span><span class="identifier-syntax">C</span><span class="plain-syntax">; </span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">heading_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_heading</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::render_body</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> { </span><span class="comment-syntax"> there are only sections and examples, or not even that</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"extensionsubheading\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"documentation"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">empty</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"None is provided."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::render_body</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">root</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">extras</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Enter the small print</span><span class="named-paragraph-number">4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"These documentation pages are first generated when an extension is "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"installed, and refreshed each time the project successfully translates."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP4_2" class="named-paragraph-link"><span class="named-paragraph">Exit the small print</span><span class="named-paragraph-number">4.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP6" class="function-link"><span class="function-syntax">DocumentationRenderer::render_footer</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4_1" class="paragraph-anchor"></a><b>&#167;4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Enter the small print</span><span class="named-paragraph-number">4.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"hr"</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"em"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP4">&#167;4</a>, <a href="7-dr.html#SP5">&#167;5</a>, <a href="7-dr.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_2" class="paragraph-anchor"></a><b>&#167;4.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Exit the small print</span><span class="named-paragraph-number">4.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"em"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP4">&#167;4</a>, <a href="7-dr.html#SP5">&#167;5</a>, <a href="7-dr.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_example_page</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_example_page</span></span>:<br/><a href="7-dr.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">eg</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="string-syntax">"Example %c"</span><span class="plain-syntax">, </span><span class="character-syntax">'A'</span><span class="plain-syntax"> + </span><span class="identifier-syntax">eg</span><span class="plain-syntax"> - </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP6" class="function-link"><span class="function-syntax">DocumentationRenderer::render_header</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">title</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::render_example</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">eg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP6" class="function-link"><span class="function-syntax">DocumentationRenderer::render_footer</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_chapter_page</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_chapter_page</span></span>:<br/><a href="7-dr.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ch</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="string-syntax">"Chapter %d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP6" class="function-link"><span class="function-syntax">DocumentationRenderer::render_header</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">title</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::render_chapter</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Enter the small print</span><span class="named-paragraph-number">4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"This is Chapter %d of %d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[1]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ch</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" &amp;bull; "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"href=\"chapter%d.html\""</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">-1);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Chapter %d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">-1);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ch</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">total_headings</span><span class="plain-syntax">[1]) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" &amp;bull; "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"href=\"chapter%d.html\""</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">+1);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Chapter %d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">+1);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP4_2" class="named-paragraph-link"><span class="named-paragraph">Exit the small print</span><span class="named-paragraph-number">4.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP6" class="function-link"><span class="function-syntax">DocumentationRenderer::render_footer</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>Each of these pages is equipped with the same Javascript and CSS.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_header</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_header</span></span>:<br/><a href="7-dr.html#SP4">&#167;4</a>, <a href="7-dr.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ptitle</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InformPages::header</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">JAVASCRIPT_FOR_ONE_EXTENSION_IRES</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-tm.html#SP7" class="function-link"><span class="function-syntax">ExtensionWebsite::add_home_breadcrumb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-tm.html#SP7" class="function-link"><span class="function-syntax">ExtensionWebsite::add_breadcrumb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"index.html"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">ptitle</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><a href="7-tm.html#SP7" class="function-link"><span class="function-syntax">ExtensionWebsite::add_breadcrumb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ptitle</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-tm.html#SP7" class="function-link"><span class="function-syntax">ExtensionWebsite::titling_and_navigation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"Documentation provided by the extension author"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_footer</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_footer</span></span>:<br/><a href="7-dr.html#SP4">&#167;4</a>, <a href="7-dr.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InformPages::footer</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>This function is the only one which assumes our documentation comes from an
extension.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_extension_details</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_extension_details</span></span>:<br/><a href="7-dr.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">edition</span><span class="plain-syntax"> = </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax"> = </span><span class="identifier-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"extensionsubheading\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"about this extension"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"This is "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-wrk.html#SP6" class="function-link"><span class="function-syntax">Works::write_to_HTML_file</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">work</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version</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">VersionNumbers::is_null</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", which gives no version number"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", version %v"</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">V</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">rubric_as_lexed</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">rubric_as_lexed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">extra_credit_as_lexed</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"em"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">extra_credit_as_lexed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"em"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">compatibility_specification</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">compatibility</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">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parsed_from</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"extensionsubheading\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"compatibility"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parsed_from</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>Now for the Table of Contents, which shows chapters, sections and examples
in a hierarchical fashion.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_toc</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_toc</span></span>:<br/><a href="7-dr.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"extensionsubheading\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"contents"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"ul"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"extensioncontents\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::traverse_from</span><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">root</span><span class="plain-syntax">, &amp;</span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::toc_visitor</span></a><span class="plain-syntax">, (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"ul"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::link_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">cdoc_heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">H</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">, </span><span class="string-syntax">"chapter%S.html"</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;Str::len(H-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'.'</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">, </span><span class="string-syntax">"chapter"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">j</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">j</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="identifier-syntax">j</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">, </span><span class="identifier-syntax">j</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">, </span><span class="string-syntax">".html"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">, </span><span class="string-syntax">"#section%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ID</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"style=\"text-decoration: none\" href=%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">)</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::toc_visitor</span><span class="plain-syntax">(</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">state</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">state</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">heading_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">H</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_heading</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"li"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"exco%d\""</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indexblack"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"b"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::link_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Chapter %S: "</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Section %S: "</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"b"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"li"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">example_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"li"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"exco%d\""</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_example</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_example</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">, </span><span class="string-syntax">"style=\"text-decoration: none\" href=\"eg%d.html#eg%d\""</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">number</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indexblack"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">link</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Example %c &amp;mdash; "</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">letter</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"li"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_body</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_body</span></span>:<br/><a href="7-dr.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</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">Trees::traverse_from</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, &amp;</span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::body_visitor</span></a><span class="plain-syntax">, (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_example</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_example</span></span>:<br/><a href="7-dr.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">eg</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">EN</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP13" class="function-link"><span class="function-syntax">DocumentationTree::find_example</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">eg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">EN</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Example %d is missing"</span><span class="plain-syntax">, </span><span class="identifier-syntax">eg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP9" class="function-link"><span class="function-syntax">DocumentationRenderer::render_example_heading</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">EN</span><span class="plain-syntax">, </span><span class="identifier-syntax">EN</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Enter the small print</span><span class="named-paragraph-number">4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"This example is drawn from "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">H</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EN</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parent</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">heading_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_heading</span><span class="plain-syntax">(</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::link_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Chapter %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::link_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Section %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"href=\"index.html\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"the introduction"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP4_2" class="named-paragraph-link"><span class="named-paragraph">Exit the small print</span><span class="named-paragraph-number">4.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_chapter</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_chapter</span></span>:<br/><a href="7-dr.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ch</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CN</span><span class="plain-syntax"> = </span><a href="7-dt.html#SP13" class="function-link"><span class="function-syntax">DocumentationTree::find_chapter</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">CN</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Chapter %d is missing"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::render_body</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cd</span><span class="plain-syntax">, </span><span class="identifier-syntax">CN</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::body_visitor</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::body_visitor</span></span>:<br/><a href="7-dr.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">state</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">state</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">heading_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">H</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_heading</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">level</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_1" class="named-paragraph-link"><span class="named-paragraph">Typeset the heading of this chapter or section</span><span class="named-paragraph-number">8.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">example_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP9" class="function-link"><span class="function-syntax">DocumentationRenderer::render_example_heading</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">paragraph_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_paragraph</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_paragraph</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">code_sample_TNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_code_sample</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_code_sample</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"blockquote"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">with_paste_marker</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_2" class="named-paragraph-link"><span class="named-paragraph">Render the paste icon</span><span class="named-paragraph-number">8.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_3" class="named-paragraph-link"><span class="named-paragraph">Render the body of the code sample</span><span class="named-paragraph-number">8.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"blockquote"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8_1" class="paragraph-anchor"></a><b>&#167;8.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Typeset the heading of this chapter or section</span><span class="named-paragraph-number">8.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"hr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"h2"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indexdullred"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"h3"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">, </span><span class="string-syntax">"id=docsec%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ID</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Chapter %S: "</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Section %S: "</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"h2"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"h3"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_2" class="paragraph-anchor"></a><b>&#167;8.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Render the paste icon</span><span class="named-paragraph-number">8.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">matter</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">; </span><span class="identifier-syntax">C</span><span class="plain-syntax">; </span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_code_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_code_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;L-&gt;</span><span class="element-syntax">indentation</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">matter</span><span class="plain-syntax">, </span><span class="string-syntax">"\t"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">matter</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">matter</span><span class="plain-syntax">, </span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PasteButtons::paste_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">matter</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;nbsp;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">matter</span><span class="plain-syntax">)</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_3" class="paragraph-anchor"></a><b>&#167;8.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Render the body of the code sample</span><span class="named-paragraph-number">8.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indexdullblue"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tabulating</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">; </span><span class="identifier-syntax">C</span><span class="plain-syntax">; </span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_code_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_code_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabular</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tabulating</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_3_4" class="named-paragraph-link"><span class="named-paragraph">Begin new row of I7 table in extension documentation</span><span class="named-paragraph-number">8.3.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_3_1" class="named-paragraph-link"><span class="named-paragraph">Begin I7 table in extension documentation</span><span class="named-paragraph-number">8.3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tabulating</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">cell</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_3_3" class="named-paragraph-link"><span class="named-paragraph">Begin table cell for I7 table in extension documentation</span><span class="named-paragraph-number">8.3.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;Str::len(L-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">) == </span><span class="character-syntax">'\t'</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_3_2" class="named-paragraph-link"><span class="named-paragraph">End table cell for I7 table in extension documentation</span><span class="named-paragraph-number">8.3.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_3_3" class="named-paragraph-link"><span class="named-paragraph">Begin table cell for I7 table in extension documentation</span><span class="named-paragraph-number">8.3.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">) == </span><span class="character-syntax">'\t'</span><span class="plain-syntax">) </span><span class="identifier-syntax">i</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">--;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">cell</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_3_2" class="named-paragraph-link"><span class="named-paragraph">End table cell for I7 table in extension documentation</span><span class="named-paragraph-number">8.3.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">cell</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_3_5" class="named-paragraph-link"><span class="named-paragraph">End row of I7 table in extension documentation</span><span class="named-paragraph-number">8.3.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tabulating</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_3_6" class="named-paragraph-link"><span class="named-paragraph">End I7 table in extension documentation</span><span class="named-paragraph-number">8.3.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tabulating</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;L-&gt;</span><span class="element-syntax">indentation</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_code_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">)-&gt;</span><span class="element-syntax">tabular</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"br"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tabulating</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP8_3_6" class="named-paragraph-link"><span class="named-paragraph">End I7 table in extension documentation</span><span class="named-paragraph-number">8.3.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_3_1" class="paragraph-anchor"></a><b>&#167;8.3.1. </b>Unsurprisingly, I7 tables are set (after their titling lines) as HTML tables,
and this is fiddly but elementary in the usual way of HTML tables:
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin I7 table in extension documentation</span><span class="named-paragraph-number">8.3.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"br"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_plain_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::first_html_column</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP8_3">&#167;8.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_3_2" class="paragraph-anchor"></a><b>&#167;8.3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">End table cell for I7 table in extension documentation</span><span class="named-paragraph-number">8.3.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">cell</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::next_html_column</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP8_3">&#167;8.3</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP8_3_3" class="paragraph-anchor"></a><b>&#167;8.3.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin table cell for I7 table in extension documentation</span><span class="named-paragraph-number">8.3.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">cell</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indexdullblue"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP8_3">&#167;8.3</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP8_3_4" class="paragraph-anchor"></a><b>&#167;8.3.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin new row of I7 table in extension documentation</span><span class="named-paragraph-number">8.3.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::first_html_column</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP8_3">&#167;8.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_3_5" class="paragraph-anchor"></a><b>&#167;8.3.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">End row of I7 table in extension documentation</span><span class="named-paragraph-number">8.3.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_html_row</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP8_3">&#167;8.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_3_6" class="paragraph-anchor"></a><b>&#167;8.3.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">End I7 table in extension documentation</span><span class="named-paragraph-number">8.3.6</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_html_row</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::end_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indexdullblue"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP8_3">&#167;8.3</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>An example is set with a two-table header, and followed optionally by a
table of its inset copy, shaded to distinguish it from the rest of the
page. The heading is constructed with a main table of one row of two cells,
in the following section. The left-hand cell then contains a further table,
in the next section.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_example_heading</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_example_heading</span></span>:<br/><a href="7-dr.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">EN</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">passage_node</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_example</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_example</span><span class="plain-syntax">(</span><span class="identifier-syntax">EN</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">, </span><span class="string-syntax">"style=\"text-decoration: none\" href=\"eg%d.html\""</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"hr"</span><span class="plain-syntax">); </span><span class="comment-syntax"> rule a line before the example heading</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_plain_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"tr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> Left hand cell: the oval icon</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">, </span><span class="string-syntax">"halign=\"left\" valign=\"top\" cellpadding=0 cellspacing=0 width=38px"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">, </span><span class="string-syntax">"id=eg%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">number</span><span class="plain-syntax">); </span><span class="comment-syntax"> provide the anchor point</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-dr.html#SP9_1" class="named-paragraph-link"><span class="named-paragraph">Typeset the lettered oval example icon</span><span class="named-paragraph-number">9.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"span"</span><span class="plain-syntax">); </span><span class="comment-syntax"> end the textual link</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> Right hand cell: the asterisks and title, with rubric underneath</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">, </span><span class="string-syntax">"cellpadding=0 cellspacing=0 halign=\"left\" valign=\"top\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">passage_node</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">link</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">asterisk</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">asterisk</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">star_count</span><span class="plain-syntax">; </span><span class="identifier-syntax">asterisk</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"img"</span><span class="plain-syntax">, </span><span class="string-syntax">"border=\"0\" src='inform:/doc_images/asterisk.png'"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"b"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indexdarkgrey"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;nbsp;Example&amp;nbsp;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indexblack"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"b"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">passage_node</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">); </span><span class="comment-syntax"> Link does not cover body, only heading</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">passage_node</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::traverse_from</span><span class="plain-syntax">(</span><span class="identifier-syntax">passage_node</span><span class="plain-syntax">, &amp;</span><a href="7-dr.html#SP8" class="function-link"><span class="function-syntax">DocumentationRenderer::body_visitor</span></a><span class="plain-syntax">, (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"tr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">)</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP9_1" class="paragraph-anchor"></a><b>&#167;9.1. </b>The little oval icon with its superimposed boldface letter is much harder to
get right on all browsers than it looks, and the following is the result of
some pretty grim experimentation. Basically, we make a tight, borderless,
one-cell-in-one-row table, use CSS to make a transparent PNG image of an oval
the background image for the table, then put a boldface letter in the centre
of its one and only cell. (Things were even worse when IE6 for Windows still
had its infamous PNG transparency bug.)
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Typeset the lettered oval example icon</span><span class="named-paragraph-number">9.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_plain_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"tr"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"oval\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">, </span><span class="string-syntax">"width=38px height=30px align=\"left\" valign=\"center\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">passage_node</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">link</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"class=\"paragraph Body\" style=\"line-height: 1px; margin-bottom: 0px; "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"margin-top: 0px; padding-bottom: 0pt; padding-top: 0px; text-align: center;\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"extensionexampleletter"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">letter</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">passage_node</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"tr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-dr.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationRenderer::render_text</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">DocumentationRenderer::render_text</span></span>:<br/><a href="7-dr.html#SP4">&#167;4</a>, <a href="7-dr.html#SP7">&#167;7</a>, <a href="7-dr.html#SP8">&#167;8</a>, <a href="7-dr.html#SP8_1">&#167;8.1</a>, <a href="7-dr.html#SP8_2">&#167;8.2</a>, <a href="7-dr.html#SP8_3">&#167;8.3</a>, <a href="7-dr.html#SP8_3_2">&#167;8.3.2</a>, <a href="7-dr.html#SP9">&#167;9</a><br/>The Mini-Website - <a href="7-tm.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">text</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="7-dc.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresssection"><a href="7-tm.html">tm</a></li><li class="progresssection"><a href="7-eip.html">eip</a></li><li class="progresssection"><a href="7-ti.html">ti</a></li><li class="progresssection"><a href="7-dt.html">dt</a></li><li class="progresssection"><a href="7-dc.html">dc</a></li><li class="progresscurrent">dr</li><li class="progressnextoff">&#10095;</li></ul></div>
</nav><!--End of weave-->
</main>
</body>
</html>

View file

@ -0,0 +1,354 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Documentation Tree</title>
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
<nav role="navigation">
<h1><a href="../index.html">
<img src="../docs-assets/Inform.png" height=72">
</a></h1>
<ul><li><a href="../index.html">home</a></li>
</ul><h2>Compiler</h2><ul>
<li><a href="../structure.html">structure</a></li>
<li><a href="../inbuildn.html">inbuild</a></li>
<li><a href="../inform7n.html">inform7</a></li>
<li><a href="../intern.html">inter</a></li>
<li><a href="../services.html">services</a></li>
<li><a href="../secrets.html">secrets</a></li>
</ul><h2>Other Tools</h2><ul>
<li><a href="../inblorbn.html">inblorb</a></li>
<li><a href="../indocn.html">indoc</a></li>
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>
<li><a href="../../../inweb/index.html">inweb</a></li>
<li><a href="../../../intest/index.html">intest</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'Documentation Tree' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inbuildn.html">Inbuild Modules</a></li><li><a href="index.html">supervisor</a></li><li><a href="index.html#7">Chapter 7: Extension Indexing</a></li><li><b>Documentation Tree</b></li></ul></div>
<p class="purpose">A data structure to hold segments of Inform resource documentation.</p>
<ul class="toc"><li><a href="7-dt.html#SP1">&#167;1. The tree itself</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. The tree itself. </b>We will store the content in a heterogeneous tree: see <a href="../../../inweb/foundation-module/2-trs.html" class="internal">Trees (in foundation)</a>.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">tree_type</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cdoc_tree_TT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> The only tree type we use in this section</span>
<span class="identifier-syntax">tree_node_type</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">heading_TNT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">example_TNT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">passage_TNT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">paragraph_TNT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">code_sample_TNT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">code_line_TNT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">heterogeneous_tree</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationTree::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">DocumentationTree::new</span></span>:<br/>Documentation Compiler - <a href="7-dc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cdoc_tree_TT</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cdoc_tree_TT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Trees::new_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"documentation tree"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><a href="7-dt.html#SP2" class="function-link"><span class="function-syntax">DocumentationTree::verify_root</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">heading_TNT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Trees::new_node_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"heading"</span><span class="plain-syntax">, </span><span class="constant-syntax">cdoc_heading_CLASS</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><a href="7-dt.html#SP4" class="function-link"><span class="function-syntax">DocumentationTree::heading_verifier</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">example_TNT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Trees::new_node_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"example"</span><span class="plain-syntax">, </span><span class="constant-syntax">cdoc_example_CLASS</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><a href="7-dt.html#SP6" class="function-link"><span class="function-syntax">DocumentationTree::example_verifier</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">passage_TNT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Trees::new_node_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"passage"</span><span class="plain-syntax">, </span><span class="constant-syntax">cdoc_passage_CLASS</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><a href="7-dt.html#SP8" class="function-link"><span class="function-syntax">DocumentationTree::passage_verifier</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">paragraph_TNT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Trees::new_node_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"paragraph"</span><span class="plain-syntax">, </span><span class="constant-syntax">cdoc_paragraph_CLASS</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><a href="7-dt.html#SP9" class="function-link"><span class="function-syntax">DocumentationTree::paragraph_verifier</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">code_sample_TNT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Trees::new_node_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"code sample"</span><span class="plain-syntax">, </span><span class="constant-syntax">cdoc_code_sample_CLASS</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><a href="7-dt.html#SP11" class="function-link"><span class="function-syntax">DocumentationTree::code_sample_verifier</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">code_line_TNT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Trees::new_node_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"line"</span><span class="plain-syntax">, </span><span class="constant-syntax">cdoc_code_line_CLASS</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><a href="7-dt.html#SP12" class="function-link"><span class="function-syntax">DocumentationTree::code_line_verifier</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">heterogeneous_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tree</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Trees::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">cdoc_tree_TT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::make_root</span><span class="plain-syntax">(</span><span class="identifier-syntax">tree</span><span class="plain-syntax">, </span><a href="7-dt.html#SP3" class="function-link"><span class="function-syntax">DocumentationTree::new_heading</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"(root)"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">tree</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>The root of the tree is required to be a heading node.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationTree::verify_root</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">DocumentationTree::verify_root</span></span>:<br/><a href="7-dt.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">N</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> != </span><span class="identifier-syntax">heading_TNT</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>Heading nodes are used for the root (which has ID 0 and level 0) and then for
all chapter and section headings (which have levels 1 and 2 respectively). All
ID numbers are unique. The root heading is the only one with an empty "count",
which is otherwise something like <span class="extract"><span class="extract-syntax">5</span></span> (chapter 5) or <span class="extract"><span class="extract-syntax">3.4</span></span> (section 4 in chapter 3).
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_heading</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">count</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax">; </span><span class="comment-syntax"> 0 = root, 1 = chapter, 2 = section</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ID</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">cdoc_heading</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationTree::new_heading</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">DocumentationTree::new_heading</span></span>:<br/><a href="7-dt.html#SP1">&#167;1</a><br/>Documentation Compiler - <a href="7-dc.html#SP2_1_1_1_1">&#167;2.1.1.1.1</a>, <a href="7-dc.html#SP2_1_1_1_2">&#167;2.1.1.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">heterogeneous_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tree</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ID</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cc</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">sc</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">H</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">cdoc_heading</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax"> = </span><span class="identifier-syntax">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">cc</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">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cc</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">cc</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">sc</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">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">, </span><span class="string-syntax">"."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sc</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">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">sc</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">level</span><span class="plain-syntax"> = </span><span class="identifier-syntax">level</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ID</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ID</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">Trees::new_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">heading_TNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_cdoc_heading</span><span class="plain-syntax">(</span><span class="identifier-syntax">H</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure cdoc_heading is accessed in 1/sm, 3/bs2, 6/hdn, 7/dr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>A heading node can only have headings or examples as children, except that
it can have a single passage node as its first child. If so, this is introductory
text.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationTree::heading_verifier</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">DocumentationTree::heading_verifier</span></span>:<br/><a href="7-dt.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">; </span><span class="identifier-syntax">C</span><span class="plain-syntax">; </span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> != </span><span class="identifier-syntax">heading_TNT</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> != </span><span class="identifier-syntax">example_TNT</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> != </span><span class="identifier-syntax">passage_TNT</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">passage_TNT</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>Example nodes are used for the lettered examples in a documentation segment.
They have a "difficulty rating" in stars, 0 to 4. Numbers are unique from 1, 2, ...;
letters are unique from A, B, C, ...
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_example</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">star_count</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> </span><span class="identifier-syntax">letter</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">cdoc_example</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationTree::new_example</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">DocumentationTree::new_example</span></span>:<br/>Documentation Compiler - <a href="7-dc.html#SP2_1_1_1_3">&#167;2.1.1.1.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">heterogeneous_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tree</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">star_count</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ecount</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_example</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">cdoc_example</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">star_count</span><span class="plain-syntax"> = </span><span class="identifier-syntax">star_count</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">number</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ecount</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">letter</span><span class="plain-syntax"> = </span><span class="character-syntax">'A'</span><span class="plain-syntax"> + (</span><span class="reserved-syntax">char</span><span class="plain-syntax">) </span><span class="identifier-syntax">ecount</span><span class="plain-syntax"> - </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Trees::new_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">example_TNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_cdoc_example</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure cdoc_example is accessed in 3/bs2, 7/dr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>An example node always has a single child: the passage containing its content.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationTree::example_verifier</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">DocumentationTree::example_verifier</span></span>:<br/><a href="7-dt.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> != </span><span class="identifier-syntax">passage_TNT</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>Passage nodes contain passages of documentation which fall under examples
or headings.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_passage</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">cdoc_passage</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationTree::new_passage</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">DocumentationTree::new_passage</span></span>:<br/>Documentation Compiler - <a href="7-dc.html#SP2_1_1_1_4_1">&#167;2.1.1.1.4.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">heterogeneous_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tree</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_passage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">cdoc_passage</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">Trees::new_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">passage_TNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_cdoc_passage</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure cdoc_passage is private to this section.</li></ul>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>A passage node is essentially a holder for a mixed list of paragraphs and
indented code samples.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationTree::passage_verifier</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">DocumentationTree::passage_verifier</span></span>:<br/><a href="7-dt.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">; </span><span class="identifier-syntax">C</span><span class="plain-syntax">; </span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> != </span><span class="identifier-syntax">paragraph_TNT</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> != </span><span class="identifier-syntax">code_sample_TNT</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>A paragraph node holds a body paragraph of text. It has no children.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_paragraph</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">content</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">cdoc_paragraph</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationTree::new_paragraph</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">DocumentationTree::new_paragraph</span></span>:<br/>Documentation Compiler - <a href="7-dc.html#SP2_1_1_1_4">&#167;2.1.1.1.4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">heterogeneous_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tree</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">content</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_paragraph</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">cdoc_paragraph</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">content</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">Trees::new_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">paragraph_TNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_cdoc_paragraph</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">int</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationTree::paragraph_verifier</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">DocumentationTree::paragraph_verifier</span></span>:<br/><a href="7-dt.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="comment-syntax"> This must be a leaf node</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure cdoc_paragraph is accessed in 7/dc, 7/dr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>A code sample node holds a single code sample.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_code_sample</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">with_paste_marker</span><span class="plain-syntax">;</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">cdoc_code_sample</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationTree::new_code_sample</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">DocumentationTree::new_code_sample</span></span>:<br/>Documentation Compiler - <a href="7-dc.html#SP2_1_1_1_8">&#167;2.1.1.1.8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">heterogeneous_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tree</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">paste_me</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_code_sample</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">cdoc_code_sample</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">with_paste_marker</span><span class="plain-syntax"> = </span><span class="identifier-syntax">paste_me</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">Trees::new_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">code_sample_TNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_cdoc_code_sample</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure cdoc_code_sample is accessed in 7/dr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>A code sample's children form a list of code lines.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationTree::code_sample_verifier</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">DocumentationTree::code_sample_verifier</span></span>:<br/><a href="7-dt.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">; </span><span class="identifier-syntax">C</span><span class="plain-syntax">; </span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> != </span><span class="identifier-syntax">code_line_TNT</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. </b>A code line node holds a single line of code, and has no children. The
indentation is relative to the start of the code sample, so usually starts
at 0, and is measured in tab stops.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_code_line</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">content</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="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tabular</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">cdoc_code_line</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationTree::new_code_line</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">DocumentationTree::new_code_line</span></span>:<br/>Documentation Compiler - <a href="7-dc.html#SP2_1_1_1_10">&#167;2.1.1.1.10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">heterogeneous_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tree</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">content</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tabular</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_code_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">cdoc_code_line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">indentation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">indentation</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabular</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tabular</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Trees::new_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">code_line_TNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_cdoc_code_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationTree::code_line_verifier</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">DocumentationTree::code_line_verifier</span></span>:<br/><a href="7-dt.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="comment-syntax"> This must be a leaf node</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure cdoc_code_line is accessed in 6/hdn, 7/dc, 7/dr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. </b>This utility function returns the <span class="extract"><span class="extract-syntax">eg</span></span>th example node, if it exists, and <span class="extract"><span class="extract-syntax">NULL</span></span>
if not.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationTree::find_example</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">DocumentationTree::find_example</span></span>:<br/>Documentation Renderer - <a href="7-dr.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">heterogeneous_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">eg</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">eg</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">1</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">dc_find_example_task</span><span class="plain-syntax"> </span><span class="identifier-syntax">task</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">task</span><span class="plain-syntax">.</span><span class="element-syntax">to_find_example</span><span class="plain-syntax"> = </span><span class="identifier-syntax">eg</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">task</span><span class="plain-syntax">.</span><span class="element-syntax">to_find_heading</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">task</span><span class="plain-syntax">.</span><span class="element-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::traverse_from</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">root</span><span class="plain-syntax">, &amp;</span><a href="7-dt.html#SP13" class="function-link"><span class="function-syntax">DocumentationTree::find_visit</span></a><span class="plain-syntax">, (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) &amp;</span><span class="identifier-syntax">task</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">task</span><span class="plain-syntax">.</span><span class="element-syntax">result</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="function-syntax">DocumentationTree::find_chapter</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">DocumentationTree::find_chapter</span></span>:<br/>Documentation Renderer - <a href="7-dr.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">heterogeneous_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ch</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ch</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">1</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">dc_find_example_task</span><span class="plain-syntax"> </span><span class="identifier-syntax">task</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">task</span><span class="plain-syntax">.</span><span class="element-syntax">to_find_example</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">task</span><span class="plain-syntax">.</span><span class="element-syntax">to_find_heading</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">(); </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">task</span><span class="plain-syntax">.</span><span class="element-syntax">to_find_heading</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ch</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">task</span><span class="plain-syntax">.</span><span class="element-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Trees::traverse_from</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">root</span><span class="plain-syntax">, &amp;</span><a href="7-dt.html#SP13" class="function-link"><span class="function-syntax">DocumentationTree::find_visit</span></a><span class="plain-syntax">, (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) &amp;</span><span class="identifier-syntax">task</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">task</span><span class="plain-syntax">.</span><span class="element-syntax">result</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">dc_find_example_task</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">to_find_example</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to_find_heading</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">result</span><span class="plain-syntax">;</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">dc_find_example_task</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">DocumentationTree::find_visit</span><span class="plain-syntax">(</span><span class="identifier-syntax">tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">state</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">dc_find_example_task</span><span class="plain-syntax"> *</span><span class="identifier-syntax">task</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">dc_find_example_task</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">state</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">task</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">result</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">task</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">to_find_example</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">example_TNT</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_example</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_example</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">number</span><span class="plain-syntax"> == </span><span class="identifier-syntax">task</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">to_find_example</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">task</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">N</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">task</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">to_find_heading</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">heading_TNT</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">cdoc_heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_cdoc_heading</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">level</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">count</span><span class="plain-syntax">, </span><span class="identifier-syntax">task</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">to_find_heading</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">task</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">N</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure dc_find_example_task is private to this section.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="7-ti.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresssection"><a href="7-tm.html">tm</a></li><li class="progresssection"><a href="7-eip.html">eip</a></li><li class="progresssection"><a href="7-ti.html">ti</a></li><li class="progresscurrent">dt</li><li class="progresssection"><a href="7-dc.html">dc</a></li><li class="progresssection"><a href="7-dr.html">dr</a></li><li class="progressnext"><a href="7-dc.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>
</body>
</html>

View file

@ -0,0 +1,842 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Extensions Index Page</title>
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
<nav role="navigation">
<h1><a href="../index.html">
<img src="../docs-assets/Inform.png" height=72">
</a></h1>
<ul><li><a href="../index.html">home</a></li>
</ul><h2>Compiler</h2><ul>
<li><a href="../structure.html">structure</a></li>
<li><a href="../inbuildn.html">inbuild</a></li>
<li><a href="../inform7n.html">inform7</a></li>
<li><a href="../intern.html">inter</a></li>
<li><a href="../services.html">services</a></li>
<li><a href="../secrets.html">secrets</a></li>
</ul><h2>Other Tools</h2><ul>
<li><a href="../inblorbn.html">inblorb</a></li>
<li><a href="../indocn.html">indoc</a></li>
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>
<li><a href="../../../inweb/index.html">inweb</a></li>
<li><a href="../../../intest/index.html">intest</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'Extensions Index Page' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inbuildn.html">Inbuild Modules</a></li><li><a href="index.html">supervisor</a></li><li><a href="index.html#7">Chapter 7: Extension Indexing</a></li><li><b>Extensions Index Page</b></li></ul></div>
<p class="purpose">To generate the index page for the extension mini-website, which is the home page displayed in the Extensions tab for the Inform GUI apps.</p>
<ul class="toc"><li><a href="7-eip.html#SP1">&#167;1. Writing the extensions home page</a></li><li><a href="7-eip.html#SP3">&#167;3. The key</a></li><li><a href="7-eip.html#SP4">&#167;4. Icons for virtual machines</a></li><li><a href="7-eip.html#SP5">&#167;5. Displaying VM restrictions</a></li><li><a href="7-eip.html#SP7">&#167;7. Sorting criteria</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Writing the extensions home page. </b>There were once two of these, but now there's just one.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionIndex::write</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">ExtensionIndex::write</span></span>:<br/>The Mini-Website - <a href="7-tm.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</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">proj</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no project"</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><a href="7-tm.html#SP3" class="function-link"><span class="function-syntax">ExtensionWebsite::cut_way_for_index_page</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</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">F</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">U</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_requirement</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">internals_used</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">materials_used</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">externals_used</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">internals_installed</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">materials_installed</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_1" class="named-paragraph-link"><span class="named-paragraph">See what we have installed and used</span><span class="named-paragraph-number">1.1</span></a></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">HOMEPAGE_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">OUT</span><span class="plain-syntax"> = &amp;</span><span class="identifier-syntax">HOMEPAGE_struct</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">STREAM_OPEN_TO_FILE</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">UTF8_ENC</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">InformPages::header</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">"Extensions"</span><span class="plain-syntax">, </span><span class="identifier-syntax">JAVASCRIPT_FOR_ONE_EXTENSION_IRES</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2" class="named-paragraph-link"><span class="named-paragraph">Write the body of the HTML</span><span class="named-paragraph-number">1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InformPages::footer</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">STREAM_CLOSE</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP1_1" class="paragraph-anchor"></a><b>&#167;1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">See what we have installed and used</span><span class="named-paragraph-number">1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">search_list</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">materials</span><span class="plain-syntax"> = </span><a href="5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::materials_nest</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</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">materials</span><span class="plain-syntax">) </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">materials</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax">, </span><span class="identifier-syntax">search_list</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">internal</span><span class="plain-syntax"> = </span><a href="1-ic.html#SP16" class="function-link"><span class="function-syntax">Supervisor::internal</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">internal</span><span class="plain-syntax">) </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">internal</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax">, </span><span class="identifier-syntax">search_list</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax"> = </span><a href="2-rqr.html#SP2" class="function-link"><span class="function-syntax">Requirements::anything_of_genre</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">extension_bundle_genre</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">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">search_list</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><a href="2-nst.html#SP9" class="function-link"><span class="function-syntax">Nests::search_for</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="identifier-syntax">search_list</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-eip.html#SP6" class="function-link"><span class="function-syntax">ExtensionIndex::find_used_extensions</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> *</span><span class="identifier-syntax">res</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-nst.html#SP2" class="function-link"><span class="function-syntax">Nests::get_tag</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nest</span><span class="plain-syntax">) == </span><span class="constant-syntax">INTERNAL_NEST_TAG</span><span class="plain-syntax">) </span><span class="identifier-syntax">internals_installed</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-nst.html#SP2" class="function-link"><span class="function-syntax">Nests::get_tag</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nest</span><span class="plain-syntax">) == </span><span class="constant-syntax">MATERIALS_NEST_TAG</span><span class="plain-syntax">) </span><span class="identifier-syntax">materials_installed</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nest_of_origin</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><a href="2-nst.html#SP2" class="function-link"><span class="function-syntax">Nests::get_tag</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nest_of_origin</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">INTERNAL_NEST_TAG:</span><span class="plain-syntax"> </span><span class="identifier-syntax">internals_used</span><span class="plain-syntax">++; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MATERIALS_NEST_TAG:</span><span class="plain-syntax"> </span><span class="identifier-syntax">materials_used</span><span class="plain-syntax">++; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span><span class="plain-syntax"> </span><span class="identifier-syntax">externals_used</span><span class="plain-syntax">++; </span><a href="2-nst.html#SP8" class="function-link"><span class="function-syntax">Nests::add_search_result</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nest_of_origin</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</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>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-eip.html#SP1">&#167;1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2" class="paragraph-anchor"></a><b>&#167;1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Write the body of the HTML</span><span class="named-paragraph-number">1.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="7-tm.html#SP7" class="function-link"><span class="function-syntax">ExtensionWebsite::add_home_breadcrumb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"Extensions in this Project"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-tm.html#SP7" class="function-link"><span class="function-syntax">ExtensionWebsite::titling_and_navigation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Those installed and those used"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::first_html_column</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"img"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"src='inform:/doc_images/extensions@2x.png' border=0 width=150 height=150"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::next_html_column</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_1" class="named-paragraph-link"><span class="named-paragraph">Display the location of installed extensions</span><span class="named-paragraph-number">1.2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_html_row</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"hr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"b"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"The project '%S' currently uses..."</span><span class="plain-syntax">, </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"b"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">usage_state</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2" class="named-paragraph-link"><span class="named-paragraph">Display an alphabetised directory</span><span class="named-paragraph-number">1.2.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"hr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">internals_used</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">internals_installed</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">materials_used</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">materials_installed</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"b"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"These are available, but are not used by '%S'..."</span><span class="plain-syntax">, </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"b"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">usage_state</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2" class="named-paragraph-link"><span class="named-paragraph">Display an alphabetised directory</span><span class="named-paragraph-number">1.2.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-eip.html#SP1">&#167;1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_1" class="paragraph-anchor"></a><b>&#167;1.2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Display the location of installed extensions</span><span class="named-paragraph-number">1.2.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><a href="2-nst.html#SP5" class="function-link"><span class="function-syntax">Nests::get_location</span></a><span class="plain-syntax">(</span><a href="5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::materials_nest</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Extensions"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PasteButtons::open_file</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">PROJECT_SPECIFIC_SYMBOL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;nbsp;"</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">materials_installed</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</span><span class="plain-syntax">(</span><span class="string-syntax">"%d extension%s installed in the .materials folder for the "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"project '%S'"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">materials_installed</span><span class="plain-syntax">, (</span><span class="identifier-syntax">materials_installed</span><span class="plain-syntax">==1)?</span><span class="string-syntax">" is"</span><span class="plain-syntax">:</span><span class="string-syntax">"s are"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">materials_installed</span><span class="plain-syntax">, </span><span class="identifier-syntax">u</span><span class="plain-syntax"> = </span><span class="identifier-syntax">materials_used</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_1_1" class="named-paragraph-link"><span class="named-paragraph">Say how many of those installed are used</span><span class="named-paragraph-number">1.2.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" (Click the icon to show the location.)"</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"No extensions are installed in the .materials folder for the "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"project '%S'. (Click the icon to show the location. "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"Extensions should be put in the 'Extensions' subfolder of this: you "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"can put them there yourself, or use the Inform app to install them "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"for you.)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"img"</span><span class="plain-syntax">, </span><span class="constant-syntax">BUILT_IN_SYMBOL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;nbsp;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"The Inform app comes with a small number of built-in extensions, which "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"you need not install, and which are automatically included if necessary. "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"'%S' has access to %d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">internals_installed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">internals_installed</span><span class="plain-syntax">, </span><span class="identifier-syntax">u</span><span class="plain-syntax"> = </span><span class="identifier-syntax">internals_used</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_1_1" class="named-paragraph-link"><span class="named-paragraph">Say how many of those installed are used</span><span class="named-paragraph-number">1.2.1.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">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">externals_used</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"img"</span><span class="plain-syntax">, </span><span class="constant-syntax">LEGACY_AREA_SYMBOL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;nbsp;"</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">"And '%S' still uses %d extension%s from the legacy extensions area. Best "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"practice is to install %s into .materials instead, which the Inform app "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"can do for you."</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">externals_used</span><span class="plain-syntax">, (</span><span class="identifier-syntax">externals_used</span><span class="plain-syntax">==1)?</span><span class="string-syntax">""</span><span class="plain-syntax">:</span><span class="string-syntax">"s"</span><span class="plain-syntax">, (</span><span class="identifier-syntax">externals_used</span><span class="plain-syntax">==1)?</span><span class="string-syntax">"it"</span><span class="plain-syntax">:</span><span class="string-syntax">"them"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-eip.html#SP1_2">&#167;1.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_1_1" class="paragraph-anchor"></a><b>&#167;1.2.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Say how many of those installed are used</span><span class="named-paragraph-number">1.2.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">u</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", but it doesn't use it."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", but it doesn't use either of them."</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", but it doesn't use any of them."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">u</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">i</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">", but it uses only %d."</span><span class="plain-syntax">, </span><span class="identifier-syntax">u</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">u</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", and it uses it."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">u</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", and it uses both of them."</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", and it uses all of them."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-eip.html#SP1_2_1">&#167;1.2.1</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_2" class="paragraph-anchor"></a><b>&#167;1.2.2. </b>The following is an alphabetised directory of extensions by author and then
title, along with some useful information about them, and then a list of
any oddities found in the external extensions area.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Display an alphabetised directory</span><span class="named-paragraph-number">1.2.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">key_list</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">extensions_key_item</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">no_entries</span><span class="plain-syntax"> = </span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> **</span><span class="identifier-syntax">sorted_census_results</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Memory::calloc</span><span class="plain-syntax">(</span><span class="identifier-syntax">no_entries</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">sizeof</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> *), </span><span class="constant-syntax">RESULTS_SORTING_MREASON</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">d</span><span class="plain-syntax"> = </span><span class="constant-syntax">3</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">no_entries_in_set</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_3" class="named-paragraph-link"><span class="named-paragraph">Sort the census into the appropriate order</span><span class="named-paragraph-number">1.2.2.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_4" class="named-paragraph-link"><span class="named-paragraph">Display the sorted version of the census</span><span class="named-paragraph-number">1.2.2.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_1" class="named-paragraph-link"><span class="named-paragraph">Print the key to any symbols used in the census lines</span><span class="named-paragraph-number">1.2.2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_2" class="named-paragraph-link"><span class="named-paragraph">Transcribe any census errors</span><span class="named-paragraph-number">1.2.2.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Memory::I7_array_free</span><span class="plain-syntax">(</span><span class="identifier-syntax">sorted_census_results</span><span class="plain-syntax">, </span><span class="constant-syntax">RESULTS_SORTING_MREASON</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">no_entries</span><span class="plain-syntax">, </span><span class="reserved-syntax">sizeof</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> *));</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-eip.html#SP1_2">&#167;1.2</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_2_1" class="paragraph-anchor"></a><b>&#167;1.2.2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Print the key to any symbols used in the census lines</span><span class="named-paragraph-number">1.2.2.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">key_list</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="7-eip.html#SP3" class="function-link"><span class="function-syntax">ExtensionIndex::render_key</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">key_list</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-eip.html#SP1_2_2">&#167;1.2.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_2_2" class="paragraph-anchor"></a><b>&#167;1.2.2.2. </b>Census errors are nothing more than copy errors arising on the copies
of extensions found by the census:
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Transcribe any census errors</span><span class="named-paragraph-number">1.2.2.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">no_census_errors</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">no_entries_in_set</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">inbuild_search_result</span><span class="plain-syntax"> *</span><span class="identifier-syntax">res</span><span class="plain-syntax"> = </span><span class="identifier-syntax">sorted_census_results</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">no_census_errors</span><span class="plain-syntax"> +=</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">errors_reading_source_text</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">no_census_errors</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="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_2_1" class="named-paragraph-link"><span class="named-paragraph">Include the headnote explaining what census errors are</span><span class="named-paragraph-number">1.2.2.2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">no_entries_in_set</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">inbuild_search_result</span><span class="plain-syntax"> *</span><span class="identifier-syntax">res</span><span class="plain-syntax"> = </span><span class="identifier-syntax">sorted_census_results</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">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">errors_reading_source_text</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">CE</span><span class="plain-syntax">, </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">errors_reading_source_text</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">INDEX_MODULE</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::open_indented_p</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="string-syntax">"hanging"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifndef</span><span class="plain-syntax"> </span><span class="identifier-syntax">INDEX_MODULE</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;b&gt;%X&lt;/b&gt; - "</span><span class="plain-syntax">, </span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ce.html#SP5" class="function-link"><span class="function-syntax">CopyErrors::write</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-eip.html#SP1_2_2">&#167;1.2.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_2_2_1" class="paragraph-anchor"></a><b>&#167;1.2.2.2.1. </b>We only want to warn people here: not to stop them from using Inform
until they put matters right.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Include the headnote explaining what census errors are</span><span class="named-paragraph-number">1.2.2.2.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"hr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</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_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"img"</span><span class="plain-syntax">, </span><span class="string-syntax">"border=0 align=\"left\" src=inform:/doc_images/census_problem.png"</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">"&lt;b&gt;Warning&lt;/b&gt;. Inform checks the folder of user-installed extensions "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"each time it translates the source text, in order to keep this directory "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"page up to date. Each file must be a properly labelled extension (with "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"its titling line correctly identifying itself), and must be in the right "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"place - e.g. 'Marbles by Daphne Quilt' must have the filename 'Marbles.i7x' "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"(or just 'Marbles' with no file extension) and be stored in the folder "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"'Daphne Quilt'. The title should be at most %d characters long; the "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"author name, %d. At the last check, these rules were not being followed:"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="constant-syntax">MAX_EXTENSION_TITLE_LENGTH</span><span class="plain-syntax">, </span><span class="constant-syntax">MAX_EXTENSION_AUTHOR_LENGTH</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-eip.html#SP1_2_2_2">&#167;1.2.2.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_2_3" class="paragraph-anchor"></a><b>&#167;1.2.2.3. </b></p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">SORT_CE_BY_TITLE</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">SORT_CE_BY_AUTHOR</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">SORT_CE_BY_LOCATION</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">SORT_CE_BY_USAGE</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span>
</pre>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Sort the census into the appropriate order</span><span class="named-paragraph-number">1.2.2.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> *</span><span class="identifier-syntax">res</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</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="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">found</span><span class="plain-syntax"> == </span><span class="identifier-syntax">usage_state</span><span class="plain-syntax">) </span><span class="identifier-syntax">sorted_census_results</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">++] = </span><span class="identifier-syntax">res</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">no_entries_in_set</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">int</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">criterion</span><span class="plain-syntax">)(</span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *, </span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">d</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SORT_CE_BY_TITLE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">criterion</span><span class="plain-syntax"> = </span><a href="7-eip.html#SP7" class="function-link"><span class="function-syntax">ExtensionIndex::compare_res_by_title</span></a><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SORT_CE_BY_AUTHOR:</span><span class="plain-syntax"> </span><span class="identifier-syntax">criterion</span><span class="plain-syntax"> = </span><a href="7-eip.html#SP7" class="function-link"><span class="function-syntax">ExtensionIndex::compare_res_by_author</span></a><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SORT_CE_BY_LOCATION:</span><span class="plain-syntax"> </span><span class="identifier-syntax">criterion</span><span class="plain-syntax"> = </span><a href="7-eip.html#SP7" class="function-link"><span class="function-syntax">ExtensionIndex::compare_res_by_location</span></a><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SORT_CE_BY_USAGE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">criterion</span><span class="plain-syntax"> = </span><a href="7-eip.html#SP7" class="function-link"><span class="function-syntax">ExtensionIndex::compare_res_by_title</span></a><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span><span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no such sorting criterion"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">qsort</span><span class="plain-syntax">(</span><span class="identifier-syntax">sorted_census_results</span><span class="plain-syntax">, (</span><span class="identifier-syntax">size_t</span><span class="plain-syntax">) </span><span class="identifier-syntax">no_entries_in_set</span><span class="plain-syntax">, </span><span class="reserved-syntax">sizeof</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> *),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">criterion</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-eip.html#SP1_2_2">&#167;1.2.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_2_4" class="paragraph-anchor"></a><b>&#167;1.2.2.4. </b>Standard rows have black text on striped background colours, these being
the usual ones seen in Mac OS X applications such as iTunes.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Display the sorted version of the census</span><span class="named-paragraph-number">1.2.2.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_html_table</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">"stripeone"</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_4_1" class="named-paragraph-link"><span class="named-paragraph">Show a titling row explaining the census sorting, if necessary</span><span class="named-paragraph-number">1.2.2.4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">stripe</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">current_author_name</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">no_entries_in_set</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">inbuild_search_result</span><span class="plain-syntax"> *</span><span class="identifier-syntax">res</span><span class="plain-syntax"> = </span><span class="identifier-syntax">sorted_census_results</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_4_2" class="named-paragraph-link"><span class="named-paragraph">Insert a subtitling row in the census sorting, if necessary</span><span class="named-paragraph-number">1.2.2.4.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">stripe</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax"> - </span><span class="identifier-syntax">stripe</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">stripe</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::first_html_column_coloured</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"stripetwo"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::first_html_column_coloured</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"stripeone"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_4_4" class="named-paragraph-link"><span class="named-paragraph">Print the census line for this extension</span><span class="named-paragraph-number">1.2.2.4.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_html_row</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">stripe</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="7-eip.html#SP2" class="function-link"><span class="function-syntax">ExtensionIndex::first_html_column_wrapping</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"stripetwo"</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">, </span><span class="constant-syntax">48</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><a href="7-eip.html#SP2" class="function-link"><span class="function-syntax">ExtensionIndex::first_html_column_wrapping</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"stripeone"</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">, </span><span class="constant-syntax">48</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_4_5" class="named-paragraph-link"><span class="named-paragraph">Print the rubric line for this extension</span><span class="named-paragraph-number">1.2.2.4.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_html_row</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<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">current_author_name</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_4_3" class="named-paragraph-link"><span class="named-paragraph">Show a final titling row closing the census sorting</span><span class="named-paragraph-number">1.2.2.4.3</span></a></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-eip.html#SP1_2_2">&#167;1.2.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_2_4_1" class="paragraph-anchor"></a><b>&#167;1.2.2.4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Show a titling row explaining the census sorting, if necessary</span><span class="named-paragraph-number">1.2.2.4.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">d</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SORT_CE_BY_TITLE:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SORT_CE_BY_USAGE:</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_4_1_1" class="named-paragraph-link"><span class="named-paragraph">Begin a tinted census line</span><span class="named-paragraph-number">1.2.2.4.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Extensions in alphabetical order"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_4_1_2" class="named-paragraph-link"><span class="named-paragraph">End a tinted census line</span><span class="named-paragraph-number">1.2.2.4.1.2</span></a></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="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SORT_CE_BY_LOCATION:</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_4_1_1" class="named-paragraph-link"><span class="named-paragraph">Begin a tinted census line</span><span class="named-paragraph-number">1.2.2.4.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Extensions grouped by location"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_4_1_2" class="named-paragraph-link"><span class="named-paragraph">End a tinted census line</span><span class="named-paragraph-number">1.2.2.4.1.2</span></a></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>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-eip.html#SP1_2_2_4">&#167;1.2.2.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_2_4_2" class="paragraph-anchor"></a><b>&#167;1.2.2.4.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Insert a subtitling row in the census sorting, if necessary</span><span class="named-paragraph-number">1.2.2.4.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">d</span><span class="plain-syntax"> == </span><span class="constant-syntax">SORT_CE_BY_AUTHOR</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::ne</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_author_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">author_name</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_author_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">author_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_4_1_1" class="named-paragraph-link"><span class="named-paragraph">Begin a tinted census line</span><span class="named-paragraph-number">1.2.2.4.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_4_2_1" class="named-paragraph-link"><span class="named-paragraph">Print the author's line in the extension census table</span><span class="named-paragraph-number">1.2.2.4.2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_4_1_2" class="named-paragraph-link"><span class="named-paragraph">End a tinted census line</span><span class="named-paragraph-number">1.2.2.4.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">stripe</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-eip.html#SP1_2_2_4">&#167;1.2.2.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_2_4_3" class="paragraph-anchor"></a><b>&#167;1.2.2.4.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Show a final titling row closing the census sorting</span><span class="named-paragraph-number">1.2.2.4.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_4_1_1" class="named-paragraph-link"><span class="named-paragraph">Begin a tinted census line</span><span class="named-paragraph-number">1.2.2.4.1.1</span></a></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">"smaller"</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">"%d extensions in total"</span><span class="plain-syntax">, </span><span class="identifier-syntax">no_entries_in_set</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="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_4_1_2" class="named-paragraph-link"><span class="named-paragraph">End a tinted census line</span><span class="named-paragraph-number">1.2.2.4.1.2</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-eip.html#SP1_2_2_4">&#167;1.2.2.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_2_4_1_1" class="paragraph-anchor"></a><b>&#167;1.2.2.4.1.1. </b>Usually white text on a grey background.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin a tinted census line</span><span class="named-paragraph-number">1.2.2.4.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::first_html_column_coloured</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"tintedrow"</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">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">"extensioncensusentry"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;nbsp;"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-eip.html#SP1_2_2_4_1">&#167;1.2.2.4.1</a> (twice), <a href="7-eip.html#SP1_2_2_4_2">&#167;1.2.2.4.2</a>, <a href="7-eip.html#SP1_2_2_4_3">&#167;1.2.2.4.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_2_4_1_2" class="paragraph-anchor"></a><b>&#167;1.2.2.4.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">End a tinted census line</span><span class="named-paragraph-number">1.2.2.4.1.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="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::end_html_row</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-eip.html#SP1_2_2_4_1">&#167;1.2.2.4.1</a> (twice), <a href="7-eip.html#SP1_2_2_4_2">&#167;1.2.2.4.2</a>, <a href="7-eip.html#SP1_2_2_4_3">&#167;1.2.2.4.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_2_4_2_1" class="paragraph-anchor"></a><b>&#167;1.2.2.4.2.1. </b>Used only in "by author".
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Print the author's line in the extension census table</span><span class="named-paragraph-number">1.2.2.4.2.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">raw_author_name</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-eip.html#SP1_2_2_4_2">&#167;1.2.2.4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_2_4_4" class="paragraph-anchor"></a><b>&#167;1.2.2.4.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Print the census line for this extension</span><span class="named-paragraph-number">1.2.2.4.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_4_4_1" class="named-paragraph-link"><span class="named-paragraph">Print column 1 of the census line</span><span class="named-paragraph-number">1.2.2.4.4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::next_html_column_nw</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_4_4_2" class="named-paragraph-link"><span class="named-paragraph">Print column 2 of the census line</span><span class="named-paragraph-number">1.2.2.4.4.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::next_html_column_nw</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_4_4_3" class="named-paragraph-link"><span class="named-paragraph">Print column 3 of the census line</span><span class="named-paragraph-number">1.2.2.4.4.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::next_html_column_w</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_4_4_4" class="named-paragraph-link"><span class="named-paragraph">Print column 4 of the census line</span><span class="named-paragraph-number">1.2.2.4.4.4</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-eip.html#SP1_2_2_4">&#167;1.2.2.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_2_4_4_1" class="paragraph-anchor"></a><b>&#167;1.2.2.4.4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Print column 1 of the census line</span><span class="named-paragraph-number">1.2.2.4.4.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"extensionindexentry"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">d</span><span class="plain-syntax"> != </span><span class="constant-syntax">SORT_CE_BY_AUTHOR</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">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">raw_title</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-nst.html#SP2" class="function-link"><span class="function-syntax">Nests::get_tag</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nest</span><span class="plain-syntax">) != </span><span class="constant-syntax">INTERNAL_NEST_TAG</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" by %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">raw_author_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="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">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">raw_title</span><span class="plain-syntax">);</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">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><a href="7-tm.html#SP5" class="function-link"><span class="function-syntax">ExtensionWebsite::page_filename</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">, -1);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TextFiles::exists</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">URL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">URL</span><span class="plain-syntax">, </span><span class="string-syntax">"%f"</span><span class="plain-syntax">, </span><a href="7-tm.html#SP5" class="function-link"><span class="function-syntax">ExtensionWebsite::page_filename_relative_to_materials</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">, -1));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">, </span><span class="string-syntax">"href='inform:/"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-wrk.html#SP12" class="function-link"><span class="function-syntax">Works::escape_apostrophes</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">, </span><span class="identifier-syntax">URL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">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\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">link</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"img"</span><span class="plain-syntax">, </span><span class="string-syntax">"%s"</span><span class="plain-syntax">, </span><span class="constant-syntax">HELP_SYMBOL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-eip.html#SP3" class="function-link"><span class="function-syntax">ExtensionIndex::add_to_key</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">key_list</span><span class="plain-syntax">, </span><span class="constant-syntax">HELP_SYMBOL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Documentation (click to read)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</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">E</span><span class="plain-syntax"> = </span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">at</span><span class="plain-syntax"> = </span><a href="5-es.html#SP18" class="function-link"><span class="function-syntax">Extensions::get_inclusion_sentence</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">at</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">source_location</span><span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lexer::word_location</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</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">sl</span><span class="plain-syntax">.</span><span class="identifier-syntax">file_of_origin</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SourceLinks::link</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">sl</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-eip.html#SP3" class="function-link"><span class="function-syntax">ExtensionIndex::add_to_key</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">key_list</span><span class="plain-syntax">, </span><span class="constant-syntax">REVEAL_SYMBOL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Included here (click to see)"</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">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">errors_reading_source_text</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"img"</span><span class="plain-syntax">, </span><span class="string-syntax">"%s"</span><span class="plain-syntax">, </span><span class="constant-syntax">PROBLEM_SYMBOL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-eip.html#SP3" class="function-link"><span class="function-syntax">ExtensionIndex::add_to_key</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">key_list</span><span class="plain-syntax">, </span><span class="constant-syntax">PROBLEM_SYMBOL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Has errors (see below)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">usage_state</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">inclusion_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">inclusion_text</span><span class="plain-syntax">, </span><span class="string-syntax">"Include %X.\n\n\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PasteButtons::paste_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">inclusion_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">inclusion_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="7-eip.html#SP3" class="function-link"><span class="function-syntax">ExtensionIndex::add_to_key</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">key_list</span><span class="plain-syntax">, </span><span class="constant-syntax">PASTE_SYMBOL</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"Source text to Include this (click to paste in)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">compatibility_specification</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">compatibility</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">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parsed_from</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="named-paragraph-container code-font"><a href="7-eip.html#SP1_2_2_4_4_1_1" class="named-paragraph-link"><span class="named-paragraph">Append icons which signify the VM requirements of the extension</span><span class="named-paragraph-number">1.2.2.4.4.1.1</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-eip.html#SP1_2_2_4_4">&#167;1.2.2.4.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_2_4_4_1_1" class="paragraph-anchor"></a><b>&#167;1.2.2.4.4.1.1. </b>VM requirements are parsed by feeding them into the lexer and calling the
same routines as would be used when parsing headings about VM requirements
in a normal run of Inform. Note that because the requirements are in round
brackets, which the lexer will split off as distinct words, we can ignore
the first and last word and just look at what is in between:
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Append icons which signify the VM requirements of the extension</span><span class="named-paragraph-number">1.2.2.4.4.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="7-eip.html#SP5" class="function-link"><span class="function-syntax">ExtensionIndex::write_icons</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">key_list</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-eip.html#SP1_2_2_4_4_1">&#167;1.2.2.4.4.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_2_4_4_2" class="paragraph-anchor"></a><b>&#167;1.2.2.4.4.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Print column 2 of the census line</span><span class="named-paragraph-number">1.2.2.4.4.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::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">"smaller"</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">VersionNumbers::is_null</span><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"v&amp;nbsp;%v"</span><span class="plain-syntax">, &amp;(</span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"--"</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>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-eip.html#SP1_2_2_4_4">&#167;1.2.2.4.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_2_4_4_3" class="paragraph-anchor"></a><b>&#167;1.2.2.4.4.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Print column 3 of the census line</span><span class="named-paragraph-number">1.2.2.4.4.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">opener</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><a href="2-nst.html#SP2" class="function-link"><span class="function-syntax">Nests::get_tag</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nest</span><span class="plain-syntax">) == </span><span class="constant-syntax">INTERNAL_NEST_TAG</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">opener</span><span class="plain-syntax"> = </span><span class="constant-syntax">BUILT_IN_SYMBOL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="7-eip.html#SP3" class="function-link"><span class="function-syntax">ExtensionIndex::add_to_key</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">key_list</span><span class="plain-syntax">, </span><span class="constant-syntax">BUILT_IN_SYMBOL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Built in"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-nst.html#SP2" class="function-link"><span class="function-syntax">Nests::get_tag</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nest</span><span class="plain-syntax">) == </span><span class="constant-syntax">MATERIALS_NEST_TAG</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">opener</span><span class="plain-syntax"> = </span><span class="constant-syntax">PROJECT_SPECIFIC_SYMBOL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="7-eip.html#SP3" class="function-link"><span class="function-syntax">ExtensionIndex::add_to_key</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">key_list</span><span class="plain-syntax">, </span><span class="constant-syntax">PROJECT_SPECIFIC_SYMBOL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Installed in .materials"</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">opener</span><span class="plain-syntax"> = </span><span class="constant-syntax">LEGACY_AREA_SYMBOL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="7-eip.html#SP3" class="function-link"><span class="function-syntax">ExtensionIndex::add_to_key</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">key_list</span><span class="plain-syntax">, </span><span class="constant-syntax">LEGACY_AREA_SYMBOL</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"Used from legacy extensions area"</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><a href="2-nst.html#SP2" class="function-link"><span class="function-syntax">Nests::get_tag</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nest</span><span class="plain-syntax">) == </span><span class="constant-syntax">INTERNAL_NEST_TAG</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"img"</span><span class="plain-syntax">, </span><span class="string-syntax">"%s"</span><span class="plain-syntax">, </span><span class="identifier-syntax">opener</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">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">INDEX_MODULE</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">area</span><span class="plain-syntax"> = </span><a href="4-em.html#SP3" class="function-link"><span class="function-syntax">ExtensionManager::path_within_nest</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nest</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PasteButtons::open_file</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">area</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">raw_author_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">opener</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-eip.html#SP1_2_2_4_4">&#167;1.2.2.4.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_2_4_4_4" class="paragraph-anchor"></a><b>&#167;1.2.2.4.4.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Print column 4 of the census line</span><span class="named-paragraph-number">1.2.2.4.4.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::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">"smaller"</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">d</span><span class="plain-syntax"> == </span><span class="constant-syntax">SORT_CE_BY_LOCATION</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-nst.html#SP2" class="function-link"><span class="function-syntax">Nests::get_tag</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nest</span><span class="plain-syntax">) == </span><span class="constant-syntax">INTERNAL_NEST_TAG</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">"Built in to Inform"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Installed in this project"</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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><a href="5-es.html#SP15" class="function-link"><span class="function-syntax">Extensions::get_rubric</span></a><span class="plain-syntax">(</span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</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">R</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</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">R</span><span class="plain-syntax">); </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"--"</span><span class="plain-syntax">);</span>
<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>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-eip.html#SP1_2_2_4_4">&#167;1.2.2.4.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_2_4_5" class="paragraph-anchor"></a><b>&#167;1.2.2.4.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Print the rubric line for this extension</span><span class="named-paragraph-number">1.2.2.4.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::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">"smaller"</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">R</span><span class="plain-syntax"> = </span><a href="5-es.html#SP15" class="function-link"><span class="function-syntax">Extensions::get_rubric</span></a><span class="plain-syntax">(</span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</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">R</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</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">R</span><span class="plain-syntax">); </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"--"</span><span class="plain-syntax">);</span>
<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>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-eip.html#SP1_2_2_4">&#167;1.2.2.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>This is just too special-purpose to belong in the foundation module.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionIndex::first_html_column_wrapping</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">ExtensionIndex::first_html_column_wrapping</span></span>:<br/><a href="7-eip.html#SP1_2_2_4">&#167;1.2.2.4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">width</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">classname</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">cs</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">left_padding</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">bottom_padding</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">classname</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"tr"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"%S\""</span><span class="plain-syntax">, </span><span class="identifier-syntax">classname</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">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">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">col</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">col</span><span class="plain-syntax">, </span><span class="string-syntax">"align=\"left\" valign=\"top\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">width</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">col</span><span class="plain-syntax">, </span><span class="string-syntax">" width=\"%d\""</span><span class="plain-syntax">, </span><span class="identifier-syntax">width</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">cs</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">col</span><span class="plain-syntax">, </span><span class="string-syntax">" colspan=\"%d\""</span><span class="plain-syntax">, </span><span class="identifier-syntax">cs</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">left_padding</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">bottom_padding</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">col</span><span class="plain-syntax">, </span><span class="string-syntax">" style=\""</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">left_padding</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">col</span><span class="plain-syntax">, </span><span class="string-syntax">"padding-left: %dpx;"</span><span class="plain-syntax">, </span><span class="identifier-syntax">left_padding</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">bottom_padding</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">col</span><span class="plain-syntax">, </span><span class="string-syntax">"padding-bottom: %dpx;"</span><span class="plain-syntax">, </span><span class="identifier-syntax">bottom_padding</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">col</span><span class="plain-syntax">, </span><span class="string-syntax">"\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">col</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">col</span><span class="plain-syntax">)</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. The key. </b>There is just no need to do this efficiently in either running time or memory.
</p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">PROBLEM_SYMBOL</span><span class="plain-syntax"> </span><span class="string-syntax">"border=\"0\" height=\"12\" src=\"inform:/doc_images/census_problem.png\""</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">REVEAL_SYMBOL</span><span class="plain-syntax"> </span><span class="string-syntax">"border=\"0\" src=\"inform:/doc_images/Reveal.png\""</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">HELP_SYMBOL</span><span class="plain-syntax"> </span><span class="string-syntax">"border=\"0\" src=\"inform:/doc_images/help.png\""</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">PASTE_SYMBOL</span><span class="plain-syntax"> </span><span class="string-syntax">"border=\"0\" src=\"inform:/doc_images/paste.png\""</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">BUILT_IN_SYMBOL</span><span class="plain-syntax"> </span><span class="string-syntax">"border=\"0\" src=\"inform:/doc_images/builtin_ext.png\""</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">PROJECT_SPECIFIC_SYMBOL</span><span class="plain-syntax"> </span><span class="string-syntax">"border=\"0\" src=\"inform:/doc_images/folder4.png\""</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">LEGACY_AREA_SYMBOL</span><span class="plain-syntax"> </span><span class="string-syntax">"border=\"0\" src=\"inform:/doc_images/pspec_ext.png\""</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">ARCH_16_SYMBOL</span><span class="plain-syntax"> </span><span class="string-syntax">"border=\"0\" src=\"inform:/doc_images/vm_z8.png\""</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">ARCH_32_SYMBOL</span><span class="plain-syntax"> </span><span class="string-syntax">"border=\"0\" src=\"inform:/doc_images/vm_glulx.png\""</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">extensions_key_item</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">image_URL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gloss</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">displayed</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">extensions_key_item</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionIndex::add_to_key</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">ExtensionIndex::add_to_key</span></span>:<br/><a href="7-eip.html#SP1_2_2_4_4_1">&#167;1.2.2.4.4.1</a>, <a href="7-eip.html#SP1_2_2_4_4_3">&#167;1.2.2.4.4.3</a>, <a href="7-eip.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">URL</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gloss</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">as_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">as_text</span><span class="plain-syntax">, </span><span class="string-syntax">"%s"</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">extensions_key_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eki</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">eki</span><span class="plain-syntax">, </span><span class="reserved-syntax">extensions_key_item</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">eki</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">image_URL</span><span class="plain-syntax">, </span><span class="identifier-syntax">as_text</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">found</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">eki</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">extensions_key_item</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">eki</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">image_URL</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">as_text</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">eki</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">gloss</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">gloss</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">eki</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">displayed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">eki</span><span class="plain-syntax">, </span><span class="reserved-syntax">extensions_key_item</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</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">as_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionIndex::render_key</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">ExtensionIndex::render_key</span></span>:<br/><a href="7-eip.html#SP1_2_2_1">&#167;1.2.2.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Key: "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sequence</span><span class="plain-syntax">[] = {</span>
<span class="plain-syntax"> </span><span class="constant-syntax">PROJECT_SPECIFIC_SYMBOL</span><span class="plain-syntax">, </span><span class="constant-syntax">BUILT_IN_SYMBOL</span><span class="plain-syntax">, </span><span class="constant-syntax">LEGACY_AREA_SYMBOL</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="constant-syntax">HELP_SYMBOL</span><span class="plain-syntax">, </span><span class="constant-syntax">REVEAL_SYMBOL</span><span class="plain-syntax">, </span><span class="constant-syntax">PASTE_SYMBOL</span><span class="plain-syntax">, </span><span class="constant-syntax">PROBLEM_SYMBOL</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="constant-syntax">ARCH_16_SYMBOL</span><span class="plain-syntax">, </span><span class="constant-syntax">ARCH_32_SYMBOL</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> };</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="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">sequence</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">] != </span><span class="identifier-syntax">NULL</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">as_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">as_text</span><span class="plain-syntax">, </span><span class="string-syntax">"%s"</span><span class="plain-syntax">, </span><span class="identifier-syntax">sequence</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">extensions_key_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eki</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">eki</span><span class="plain-syntax">, </span><span class="reserved-syntax">extensions_key_item</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">eki</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">image_URL</span><span class="plain-syntax">, </span><span class="identifier-syntax">as_text</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"img"</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">eki</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">image_URL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;nbsp;%S &amp;nbsp;&amp;nbsp;"</span><span class="plain-syntax">, </span><span class="identifier-syntax">eki</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">gloss</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">eki</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">displayed</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="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">as_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">extensions_key_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eki</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">eki</span><span class="plain-syntax">, </span><span class="reserved-syntax">extensions_key_item</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">eki</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">displayed</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"img"</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">eki</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">image_URL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;nbsp;%S &amp;nbsp;&amp;nbsp;"</span><span class="plain-syntax">, </span><span class="identifier-syntax">eki</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">gloss</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">eki</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">displayed</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="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>
</pre>
<ul class="endnotetexts"><li>The structure extensions_key_item is private to this section.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Icons for virtual machines. </b>And everything else is cosmetic: printing, or showing icons to signify,
the current VM or some set of permitted VMs. The following plots the
icon associated with a given minor VM, and explicates what the icons mean:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionIndex::plot_icon</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">ExtensionIndex::plot_icon</span></span>:<br/><a href="7-eip.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">target_vm</span><span class="plain-syntax"> *</span><span class="identifier-syntax">VM</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">VM</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">VM_image</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"img"</span><span class="plain-syntax">, </span><span class="string-syntax">"border=0 src=inform:/doc_images/%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">VM</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">VM_image</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;nbsp;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. Displaying VM restrictions. </b>Given a word range, we describe the result as concisely as we can with a
row of icons (but do not bother for the common case where some extension
has no restriction on its use).
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionIndex::write_icons</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ExtensionIndex::write_icons</span></span>:<br/><a href="7-eip.html#SP1_2_2_4_4_1_1">&#167;1.2.2.4.4.1.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">key_list</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">compatibility_specification</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">something_16</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">everything_16</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">something_32</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">everything_32</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">target_vm</span><span class="plain-syntax"> *</span><span class="identifier-syntax">VM</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">VM</span><span class="plain-syntax">, </span><span class="identifier-syntax">target_vm</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">Architectures::is_16_bit</span><span class="plain-syntax">(</span><span class="identifier-syntax">VM</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">architecture</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">Compatibility::test</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">VM</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">something_16</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">everything_16</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Compatibility::test</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">VM</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">something_32</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">everything_32</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">everything_16</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">everything_32</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</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">everything_16</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">something_32</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"img"</span><span class="plain-syntax">, </span><span class="string-syntax">"%s"</span><span class="plain-syntax">, </span><span class="constant-syntax">ARCH_16_SYMBOL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-eip.html#SP3" class="function-link"><span class="function-syntax">ExtensionIndex::add_to_key</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">key_list</span><span class="plain-syntax">, </span><span class="constant-syntax">ARCH_16_SYMBOL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Z-machine only (16-bit)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</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">everything_32</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">something_16</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"img"</span><span class="plain-syntax">, </span><span class="string-syntax">"%s"</span><span class="plain-syntax">, </span><span class="constant-syntax">ARCH_32_SYMBOL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-eip.html#SP3" class="function-link"><span class="function-syntax">ExtensionIndex::add_to_key</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">key_list</span><span class="plain-syntax">, </span><span class="constant-syntax">ARCH_32_SYMBOL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Glulx only (32-bit)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" - %S "</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parsed_from</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dictionary</span><span class="plain-syntax"> *</span><span class="identifier-syntax">shown_already</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Dictionaries::new</span><span class="plain-syntax">(16, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">VM</span><span class="plain-syntax">, </span><span class="identifier-syntax">target_vm</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">Compatibility::test</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">VM</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">icon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">VM</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">VM_image</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">icon</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">Dictionaries::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">shown_already</span><span class="plain-syntax">, </span><span class="identifier-syntax">icon</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-eip.html#SP4" class="function-link"><span class="function-syntax">ExtensionIndex::plot_icon</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">VM</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">Dictionaries::create_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">shown_already</span><span class="plain-syntax">, </span><span class="identifier-syntax">icon</span><span class="plain-syntax">), </span><span class="string-syntax">"X"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-eip.html#SP3" class="function-link"><span class="function-syntax">ExtensionIndex::add_to_key</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">key_list</span><span class="plain-syntax">, </span><span class="constant-syntax">ARCH_16_SYMBOL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Z-machine only (16-bit)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-eip.html#SP3" class="function-link"><span class="function-syntax">ExtensionIndex::add_to_key</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">key_list</span><span class="plain-syntax">, </span><span class="constant-syntax">ARCH_32_SYMBOL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Glulx only (32-bit)"</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>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionIndex::find_used_extensions</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">ExtensionIndex::find_used_extensions</span></span>:<br/><a href="7-eip.html#SP1_1">&#167;1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">U</span><span class="plain-syntax">, </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><a href="2-cps.html#SP9" class="function-link"><span class="function-syntax">Copies::construct_project_graph</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-eip.html#SP6" class="function-link"><span class="function-syntax">ExtensionIndex::find_used_extensions_r</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><a href="3-bg.html#SP8" class="function-link"><span class="function-syntax">Graphs::get_unique_graph_scan_count</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">U</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionIndex::find_used_extensions_r</span><span class="plain-syntax">(</span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">scan_count</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">U</span><span class="plain-syntax">, </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</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">V</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="constant-syntax">COPY_VERTEX</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre</span><span class="plain-syntax"> == </span><span class="identifier-syntax">extension_genre</span><span class="plain-syntax">) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre</span><span class="plain-syntax"> == </span><span class="identifier-syntax">extension_bundle_genre</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">last_scanned</span><span class="plain-syntax"> != </span><span class="identifier-syntax">scan_count</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">last_scanned</span><span class="plain-syntax"> = </span><span class="identifier-syntax">scan_count</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="constant-syntax">REQUIREMENT_VERTEX</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">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_requirement</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre</span><span class="plain-syntax"> == </span><span class="identifier-syntax">extension_genre</span><span class="plain-syntax">) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_requirement</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre</span><span class="plain-syntax"> == </span><span class="identifier-syntax">extension_bundle_genre</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_requirement</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</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">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">W</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">build_edges</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="7-eip.html#SP6" class="function-link"><span class="function-syntax">ExtensionIndex::find_used_extensions_r</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">scan_count</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">use_edges</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="7-eip.html#SP6" class="function-link"><span class="function-syntax">ExtensionIndex::find_used_extensions_r</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">scan_count</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. Sorting criteria. </b>The following give some sorting criteria, and are functions fit to be
handed to <span class="extract"><span class="extract-syntax">qsort</span></span>.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionIndex::compare_res_by_title</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">ExtensionIndex::compare_res_by_title</span></span>:<br/><a href="7-eip.html#SP1_2_2_3">&#167;1.2.2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">res1</span><span class="plain-syntax">, </span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">res2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> *</span><span class="identifier-syntax">e1</span><span class="plain-syntax"> = *((</span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> **) </span><span class="identifier-syntax">res1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> *</span><span class="identifier-syntax">e2</span><span class="plain-syntax"> = *((</span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> **) </span><span class="identifier-syntax">res2</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">E1</span><span class="plain-syntax"> = </span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">e1</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</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">E2</span><span class="plain-syntax"> = </span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">e2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-es.html#SP5" class="function-link"><span class="function-syntax">Extensions::compare_by_title</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E2</span><span class="plain-syntax">, </span><span class="identifier-syntax">E1</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionIndex::compare_res_by_author</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">ExtensionIndex::compare_res_by_author</span></span>:<br/><a href="7-eip.html#SP1_2_2_3">&#167;1.2.2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">res1</span><span class="plain-syntax">, </span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">res2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> *</span><span class="identifier-syntax">e1</span><span class="plain-syntax"> = *((</span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> **) </span><span class="identifier-syntax">res1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> *</span><span class="identifier-syntax">e2</span><span class="plain-syntax"> = *((</span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> **) </span><span class="identifier-syntax">res2</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">E1</span><span class="plain-syntax"> = </span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">e1</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</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">E2</span><span class="plain-syntax"> = </span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">e2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-es.html#SP5" class="function-link"><span class="function-syntax">Extensions::compare_by_author</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E2</span><span class="plain-syntax">, </span><span class="identifier-syntax">E1</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionIndex::compare_res_by_location</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">ExtensionIndex::compare_res_by_location</span></span>:<br/><a href="7-eip.html#SP1_2_2_3">&#167;1.2.2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">res1</span><span class="plain-syntax">, </span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">res2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> *</span><span class="identifier-syntax">e1</span><span class="plain-syntax"> = *((</span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> **) </span><span class="identifier-syntax">res1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> *</span><span class="identifier-syntax">e2</span><span class="plain-syntax"> = *((</span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> **) </span><span class="identifier-syntax">res2</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">d</span><span class="plain-syntax"> = </span><a href="2-nst.html#SP2" class="function-link"><span class="function-syntax">Nests::get_tag</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">e1</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nest</span><span class="plain-syntax">) - </span><a href="2-nst.html#SP2" class="function-link"><span class="function-syntax">Nests::get_tag</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">e2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nest</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">d</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">d</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="7-eip.html#SP7" class="function-link"><span class="function-syntax">ExtensionIndex::compare_res_by_title</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">res1</span><span class="plain-syntax">, </span><span class="identifier-syntax">res2</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="7-tm.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresssection"><a href="7-tm.html">tm</a></li><li class="progresscurrent">eip</li><li class="progresssection"><a href="7-ti.html">ti</a></li><li class="progresssection"><a href="7-dt.html">dt</a></li><li class="progresssection"><a href="7-dc.html">dc</a></li><li class="progresssection"><a href="7-dr.html">dr</a></li><li class="progressnext"><a href="7-ti.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>
</body>
</html>

View file

@ -0,0 +1,605 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>The Installer</title>
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
<nav role="navigation">
<h1><a href="../index.html">
<img src="../docs-assets/Inform.png" height=72">
</a></h1>
<ul><li><a href="../index.html">home</a></li>
</ul><h2>Compiler</h2><ul>
<li><a href="../structure.html">structure</a></li>
<li><a href="../inbuildn.html">inbuild</a></li>
<li><a href="../inform7n.html">inform7</a></li>
<li><a href="../intern.html">inter</a></li>
<li><a href="../services.html">services</a></li>
<li><a href="../secrets.html">secrets</a></li>
</ul><h2>Other Tools</h2><ul>
<li><a href="../inblorbn.html">inblorb</a></li>
<li><a href="../indocn.html">indoc</a></li>
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>
<li><a href="../../../inweb/index.html">inweb</a></li>
<li><a href="../../../intest/index.html">intest</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'The Installer' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inbuildn.html">Inbuild Modules</a></li><li><a href="index.html">supervisor</a></li><li><a href="index.html#7">Chapter 7: Extension Indexing</a></li><li><b>The Installer</b></li></ul></div>
<p class="purpose">To produce a report page of HTML for use in the Inform GUI apps, when a resource such as an extension is inspected or installed.</p>
<ul class="toc"><li><a href="7-ti.html#SP1">&#167;1. HTML page</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. HTML page. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inbuild_report_HTML</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionInstaller::set_filename</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="plain-syntax"> </span><span class="identifier-syntax">inbuild_report_HTML</span><span class="plain-syntax"> = </span><span class="identifier-syntax">F</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">inbuild_report_file_struct</span><span class="plain-syntax">; </span><span class="comment-syntax"> The actual report file</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inbuild_report_file</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> As a </span><span class="extract"><span class="extract-syntax">text_stream *</span></span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionInstaller::begin</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">ExtensionInstaller::begin</span></span>:<br/><a href="7-ti.html#SP2_1">&#167;2.1</a>, <a href="7-ti.html#SP2_2">&#167;2.2</a>, <a href="7-ti.html#SP2_3">&#167;2.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subtitle</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">inbuild_report_HTML</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inbuild_report_file</span><span class="plain-syntax"> = &amp;</span><span class="identifier-syntax">inbuild_report_file_struct</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">STREAM_OPEN_TO_FILE</span><span class="plain-syntax">(</span><span class="identifier-syntax">inbuild_report_file</span><span class="plain-syntax">, </span><span class="identifier-syntax">inbuild_report_HTML</span><span class="plain-syntax">, </span><span class="identifier-syntax">UTF8_ENC</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Errors::fatal</span><span class="plain-syntax">(</span><span class="string-syntax">"can't open report file"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">inbuild_report_file</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InformPages::header</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">JAVASCRIPT_FOR_STANDARD_PAGES_IRES</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-tm.html#SP7" class="function-link"><span class="function-syntax">ExtensionWebsite::add_home_breadcrumb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-tm.html#SP7" class="function-link"><span class="function-syntax">ExtensionWebsite::add_breadcrumb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-tm.html#SP7" class="function-link"><span class="function-syntax">ExtensionWebsite::titling_and_navigation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">subtitle</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionInstaller::end</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">ExtensionInstaller::end</span></span>:<br/><a href="7-ti.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inbuild_report_file</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">inbuild_report_file</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"hr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InformPages::footer</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inbuild_report_file</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>The Installer works in two stages. First it is called with <span class="extract"><span class="extract-syntax">confirmed</span></span> false,
and it produces an HTML report on the feasibility of making the installation,
with a clickable Confirm button. Then, assuming the user does click that button,
the Installer is called again, with <span class="extract"><span class="extract-syntax">confirmed</span></span> true. It takes action and also
produces a second report.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionInstaller::install</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">confirmed</span><span class="plain-syntax">, </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to_tool</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">project</span><span class="plain-syntax"> = </span><a href="1-ic.html#SP22" class="function-link"><span class="function-syntax">Supervisor::project_set_at_command_line</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">project</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">Errors::fatal</span><span class="plain-syntax">(</span><span class="string-syntax">"-project not set at command line"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">pname</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">pname</span><span class="plain-syntax">, </span><span class="string-syntax">"'%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">project</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</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">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre</span><span class="plain-syntax"> == </span><span class="identifier-syntax">extension_genre</span><span class="plain-syntax">) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre</span><span class="plain-syntax"> == </span><span class="identifier-syntax">extension_bundle_genre</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">N</span><span class="plain-syntax"> = </span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">errors_reading_source_text</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-ti.html#SP2_3" class="named-paragraph-link"><span class="named-paragraph">Begin report on a damaged extension</span><span class="named-paragraph-number">2.3</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-ti.html#SP2_2" class="named-paragraph-link"><span class="named-paragraph">Begin report on a valid extension</span><span class="named-paragraph-number">2.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP7" class="function-link"><span class="function-syntax">Copies::get_source_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><a href="2-cps.html#SP9" class="function-link"><span class="function-syntax">Copies::construct_project_graph</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">confirmed</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="7-ti.html#SP2_5" class="named-paragraph-link"><span class="named-paragraph">Make confirmed report</span><span class="named-paragraph-number">2.5</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-ti.html#SP2_4" class="named-paragraph-link"><span class="named-paragraph">Make unconfirmed report</span><span class="named-paragraph-number">2.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-ti.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Report on something else</span><span class="named-paragraph-number">2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="7-ti.html#SP1" class="function-link"><span class="function-syntax">ExtensionInstaller::end</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">pname</span><span class="plain-syntax">)</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2_1" class="paragraph-anchor"></a><b>&#167;2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Report on something else</span><span class="named-paragraph-number">2.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="7-ti.html#SP1" class="function-link"><span class="function-syntax">ExtensionInstaller::begin</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"Not an extension..."</span><span class="plain-syntax">, </span><a href="2-gnr.html#SP1" class="function-link"><span class="function-syntax">Genres::name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Despite its file/directory name, this doesn't seem to be an extension, "</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">"and it can't be installed."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-ti.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_2" class="paragraph-anchor"></a><b>&#167;2.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin report on a valid extension</span><span class="named-paragraph-number">2.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">desc</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">version</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-wrk.html#SP6" class="function-link"><span class="function-syntax">Works::write</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">desc</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version</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">VersionNumbers::is_null</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</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">version</span><span class="plain-syntax">, </span><span class="string-syntax">"An extension"</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">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">version</span><span class="plain-syntax">, </span><span class="string-syntax">"Version %v of an extension"</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">V</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="7-ti.html#SP1" class="function-link"><span class="function-syntax">ExtensionInstaller::begin</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">desc</span><span class="plain-syntax">, </span><span class="identifier-syntax">version</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">desc</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">version</span><span class="plain-syntax">)</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-ti.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_3" class="paragraph-anchor"></a><b>&#167;2.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin report on a damaged extension</span><span class="named-paragraph-number">2.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">desc</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">desc</span><span class="plain-syntax">, </span><span class="string-syntax">"This may be: "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-edt.html#SP3" class="function-link"><span class="function-syntax">Editions::inspect</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">desc</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="7-ti.html#SP1" class="function-link"><span class="function-syntax">ExtensionInstaller::begin</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"Warning: Damaged extension"</span><span class="plain-syntax">, </span><span class="identifier-syntax">desc</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-ti.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_4" class="paragraph-anchor"></a><b>&#167;2.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make unconfirmed report</span><span class="named-paragraph-number">2.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</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-ti.html#SP2_4_1" class="named-paragraph-link"><span class="named-paragraph">Report on damage to extension</span><span class="named-paragraph-number">2.4.1</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-ti.html#SP2_4_2" class="named-paragraph-link"><span class="named-paragraph">Report that extension seems valid</span><span class="named-paragraph-number">2.4.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"hr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-ti.html#SP2_4_3" class="named-paragraph-link"><span class="named-paragraph">Explain about extensions</span><span class="named-paragraph-number">2.4.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_search_result</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">same</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">earlier</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">later</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-ti.html#SP2_4_4" class="named-paragraph-link"><span class="named-paragraph">Search the extensions currently installed in the project</span><span class="named-paragraph-number">2.4.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-ti.html#SP2_4_5" class="named-paragraph-link"><span class="named-paragraph">Count how many versions of the same extension are already installed</span><span class="named-paragraph-number">2.4.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"hr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-ti.html#SP2_4_6" class="named-paragraph-link"><span class="named-paragraph">Come to the point</span><span class="named-paragraph-number">2.4.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-ti.html#SP2_4_7" class="named-paragraph-link"><span class="named-paragraph">Finish up with a big red or green button</span><span class="named-paragraph-number">2.4.7</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-ti.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_4_1" class="paragraph-anchor"></a><b>&#167;2.4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Report on damage to extension</span><span class="named-paragraph-number">2.4.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"This extension is broken, and needs repair before it can be used. "</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">"Specifically:"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::list_attached_errors_to_HTML</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rubric</span><span class="plain-syntax"> = </span><a href="5-es.html#SP15" class="function-link"><span class="function-syntax">Extensions::get_rubric</span></a><span class="plain-syntax">(</span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">rubric</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</span><span class="plain-syntax">(</span><span class="string-syntax">"The extension says this about itself:"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"blockquote"</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">rubric</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"blockquote"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-ti.html#SP2_4">&#167;2.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_4_2" class="paragraph-anchor"></a><b>&#167;2.4.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Report that extension seems valid</span><span class="named-paragraph-number">2.4.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"This looks like a valid extension"</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">rubric</span><span class="plain-syntax"> = </span><a href="5-es.html#SP15" class="function-link"><span class="function-syntax">Extensions::get_rubric</span></a><span class="plain-syntax">(</span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">rubric</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</span><span class="plain-syntax">(</span><span class="string-syntax">", and says this about itself:"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"blockquote"</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">rubric</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"blockquote"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</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">", but does not say what it is for."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-ti.html#SP2_4_2_1" class="named-paragraph-link"><span class="named-paragraph">Make documentation</span><span class="named-paragraph-number">2.4.2.1</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-ti.html#SP2_4">&#167;2.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_4_3" class="paragraph-anchor"></a><b>&#167;2.4.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Explain about extensions</span><span class="named-paragraph-number">2.4.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Extensions are additional Inform features, often contributed by Inform "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"authors from around the world. Authors download them as needed. Each "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"project wanting to use an extension must install it into the 'Extensions' "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"subfolder of its '.materials' folder. Authors are free to do that by hand, but "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"this installer is more convenient. For more on extensions, see: "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DocReferences::link</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">"EXTENSIONS"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"The '.materials' folder for %S is here: "</span><span class="plain-syntax">, </span><span class="identifier-syntax">pname</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">area</span><span class="plain-syntax"> = </span><a href="5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::materials_path</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PasteButtons::open_file</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">area</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="string-syntax">"border=\"0\" src=\"inform:/doc_images/folder.png\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-ti.html#SP2_4">&#167;2.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_5_1" class="paragraph-anchor"></a><b>&#167;2.5.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">List the extensions currently Included by the project</span><span class="named-paragraph-number">2.5.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rc</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">bic</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">ic</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="7-ti.html#SP3" class="function-link"><span class="function-syntax">ExtensionInstaller::show_extensions</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><a href="3-bg.html#SP8" class="function-link"><span class="function-syntax">Graphs::get_unique_graph_scan_count</span></a><span class="plain-syntax">(),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">bic</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">ic</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">rc</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">ic</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"The project %S uses the following extensions (on the "</span><span class="plain-syntax">, </span><span class="identifier-syntax">pname</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">"basis of what it Includes, and what they in turn Include), which it has installed:"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"ul"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-ti.html#SP3" class="function-link"><span class="function-syntax">ExtensionInstaller::show_extensions</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><a href="3-bg.html#SP8" class="function-link"><span class="function-syntax">Graphs::get_unique_graph_scan_count</span></a><span class="plain-syntax">(),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">bic</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">ic</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">rc</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"ul"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bic</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"not counting extensions built into Inform which do not need to be installed ("</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bic</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="7-ti.html#SP3" class="function-link"><span class="function-syntax">ExtensionInstaller::show_extensions</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><a href="3-bg.html#SP8" class="function-link"><span class="function-syntax">Graphs::get_unique_graph_scan_count</span></a><span class="plain-syntax">(),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">bic</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">ic</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">rc</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bic</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Installing extensions is not the same thing as actually using them. "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"The project %S uses only extensions "</span><span class="plain-syntax">, </span><span class="identifier-syntax">pname</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">"built into Inform which do not need to be installed ("</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bic</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="7-ti.html#SP3" class="function-link"><span class="function-syntax">ExtensionInstaller::show_extensions</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><a href="3-bg.html#SP8" class="function-link"><span class="function-syntax">Graphs::get_unique_graph_scan_count</span></a><span class="plain-syntax">(),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">bic</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">ic</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">rc</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">") and are included automatically."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Except for those ones, "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"extensions take effect only if the source contains a sentence like "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"'Include EXTENSION TITLE by EXTENSION AUTHOR.' At present, the source "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"doesn't contain any sentences like that."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rc</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"The project asks to Include the following, not yet installed:"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"ul"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-ti.html#SP3" class="function-link"><span class="function-syntax">ExtensionInstaller::show_extensions</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><a href="3-bg.html#SP8" class="function-link"><span class="function-syntax">Graphs::get_unique_graph_scan_count</span></a><span class="plain-syntax">(),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">bic</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">ic</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">rc</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"ul"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-ti.html#SP2_5">&#167;2.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_4_4" class="paragraph-anchor"></a><b>&#167;2.4.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Search the extensions currently installed in the project</span><span class="named-paragraph-number">2.4.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax"> = </span><a href="2-rqr.html#SP2" class="function-link"><span class="function-syntax">Requirements::anything_of_genre</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">extension_bundle_genre</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">search_list</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><a href="5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::materials_nest</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">), </span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax">, </span><span class="identifier-syntax">search_list</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-nst.html#SP9" class="function-link"><span class="function-syntax">Nests::search_for</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="identifier-syntax">search_list</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-ti.html#SP2_4">&#167;2.4</a>, <a href="7-ti.html#SP2_5">&#167;2.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_5_2" class="paragraph-anchor"></a><b>&#167;2.5.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">List the extensions currently installed in the project</span><span class="named-paragraph-number">2.5.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> *</span><span class="identifier-syntax">search_result</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">unused</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">broken</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">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">search_result</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">search_result</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">errors_reading_source_text</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">broken</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="7-ti.html#SP4" class="function-link"><span class="function-syntax">ExtensionInstaller::seek_extension_in_graph</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">search_result</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">unused</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">unused</span><span class="plain-syntax"> + </span><span class="identifier-syntax">broken</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">unused</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"The following are currently installed for %S, but not (yet) "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"Included and so not used. (You can click the 'paste' buttons to "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"paste a suitable Include sentence into the source text.)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pname</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"ul"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">search_result</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">search_result</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">errors_reading_source_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">if</span><span class="plain-syntax"> (</span><a href="7-ti.html#SP4" class="function-link"><span class="function-syntax">ExtensionInstaller::seek_extension_in_graph</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">search_result</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"li"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP6" class="function-link"><span class="function-syntax">Copies::write_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">search_result</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;nbsp;&amp;nbsp;"</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">inclusion_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">inclusion_text</span><span class="plain-syntax">, </span><span class="string-syntax">"Include %X.\n\n\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">search_result</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PasteButtons::paste_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">inclusion_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">inclusion_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;nbsp;&lt;i&gt;'Include'&lt;/i&gt;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"li"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"ul"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-ti.html#SP2_5">&#167;2.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_4_5" class="paragraph-anchor"></a><b>&#167;2.4.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Count how many versions of the same extension are already installed</span><span class="named-paragraph-number">2.4.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> *</span><span class="identifier-syntax">search_result</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">search_result</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-wrk.html#SP10" class="function-link"><span class="function-syntax">Works::cmp</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">, </span><span class="identifier-syntax">search_result</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">) == </span><span class="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">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">VersionNumbers::cmp</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version</span><span class="plain-syntax">, </span><span class="identifier-syntax">search_result</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version</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="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">same</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">earlier</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">later</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-ti.html#SP2_4">&#167;2.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_4_2_1" class="paragraph-anchor"></a><b>&#167;2.4.2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make documentation</span><span class="named-paragraph-number">2.4.2.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="7-tm.html#SP7" class="function-link"><span class="function-syntax">ExtensionWebsite::document_extension</span></a><span class="plain-syntax">(</span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">), </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">project</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Documentation about %S "</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">URL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">URL</span><span class="plain-syntax">, </span><span class="string-syntax">"%f"</span><span class="plain-syntax">, </span><a href="7-tm.html#SP5" class="function-link"><span class="function-syntax">ExtensionWebsite::page_filename</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</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">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">, </span><span class="string-syntax">"href='"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-wrk.html#SP12" class="function-link"><span class="function-syntax">Works::escape_apostrophes</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">, </span><span class="identifier-syntax">URL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">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\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">link</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">link</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"can be read here."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-ti.html#SP2_4_2">&#167;2.4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_4_6" class="paragraph-anchor"></a><b>&#167;2.4.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Come to the point</span><span class="named-paragraph-number">2.4.6</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"So, then, click the button below to install %S to the Materials folder of %S. "</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">pname</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">"If you prefer not to, simply do something else: nothing needs to be cancelled."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-ti.html#SP2_4">&#167;2.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_4_7" class="paragraph-anchor"></a><b>&#167;2.4.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Finish up with a big red or green button</span><span class="named-paragraph-number">2.4.7</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">same</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;b&gt;Note&lt;/b&gt;. The same version of this same extension seems to be installed already. "</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">"You can go ahead and install, but if you do the old copy will be removed."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"href='javascript:project().confirmAction()'"</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">"button"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"dangerousbutton\""</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">"Replace %S in %S with this new copy"</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">pname</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">"button"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">earlier</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;b&gt;Note&lt;/b&gt;. An earlier version of this same extension seems to be installed already. "</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">"You can go ahead and install, and this new one will take precedence over the old "</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">"one, but it won't be thrown away. (You can remove it by hand if you want it gone.)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"href='javascript:project().confirmAction()'"</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">"button"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"dangerousbutton\""</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">"Install this later copy of %S to %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">pname</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">"button"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">later</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;b&gt;Note&lt;/b&gt;. A later version of this same extension seems to be installed already. "</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">"You can go ahead and install, but this new one is unlikely to change anything "</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">"because Inform will normally prefer to use the later version, which is already "</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">"there. (You can remove it by hand if you want it gone.)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"href='javascript:project().confirmAction()'"</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">"button"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"dangerousbutton\""</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">"Install this earlier copy of %S to %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">pname</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">"button"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"href='javascript:project().confirmAction()'"</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">"button"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"dangerousbutton\""</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">"Install this anyway"</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">"button"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"href='javascript:project().confirmAction()'"</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">"button"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"safebutton\""</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">"Install %S to %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">pname</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">"button"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-ti.html#SP2_4">&#167;2.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_5" class="paragraph-anchor"></a><b>&#167;2.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make confirmed report</span><span class="named-paragraph-number">2.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">use</span><span class="plain-syntax"> = </span><span class="constant-syntax">SHELL_METHODOLOGY</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">build_methodology</span><span class="plain-syntax"> *</span><span class="identifier-syntax">BM</span><span class="plain-syntax"> = </span><a href="3-bm.html#SP2" class="function-link"><span class="function-syntax">BuildMethodology::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Pathnames::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">to_tool</span><span class="plain-syntax">), </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">use</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP15" class="function-link"><span class="function-syntax">Copies::copy_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::materials_nest</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">), </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">BM</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"This extension has now been installed in the materials folder for %S, as:"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pname</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"ul"</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">"li"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre</span><span class="plain-syntax"> == </span><span class="identifier-syntax">extension_bundle_genre</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><a href="4-ebm.html#SP7" class="function-link"><span class="function-syntax">ExtensionBundleManager::pathname_in_nest</span></a><span class="plain-syntax">(</span><a href="5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::materials_nest</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">), </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"the folder "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"b"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::relative_URL</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Pathnames::up</span><span class="plain-syntax">(</span><a href="5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::materials_path</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">)), </span><span class="identifier-syntax">P</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">else</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><a href="4-em.html#SP7" class="function-link"><span class="function-syntax">ExtensionManager::filename_in_nest</span></a><span class="plain-syntax">(</span><a href="5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::materials_nest</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">), </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"the file "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"b"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::to_text_relative</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">Pathnames::up</span><span class="plain-syntax">(</span><a href="5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::materials_path</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</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="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"li"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"ul"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"hr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-tm.html#SP2" class="function-link"><span class="function-syntax">ExtensionWebsite::update</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-ti.html#SP2_5_1" class="named-paragraph-link"><span class="named-paragraph">List the extensions currently Included by the project</span><span class="named-paragraph-number">2.5.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-ti.html#SP2_4_4" class="named-paragraph-link"><span class="named-paragraph">Search the extensions currently installed in the project</span><span class="named-paragraph-number">2.4.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-ti.html#SP2_5_2" class="named-paragraph-link"><span class="named-paragraph">List the extensions currently installed in the project</span><span class="named-paragraph-number">2.5.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> *</span><span class="identifier-syntax">search_result</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">broken</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">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">search_result</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">search_result</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">errors_reading_source_text</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">broken</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">broken</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"hr"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Although installed, the following have errors and will not work. "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"They may need to be repaired, or may simply not be extensions at all:"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"ul"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">search_result</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">search_result</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">errors_reading_source_text</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"li"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP6" class="function-link"><span class="function-syntax">Copies::write_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">search_result</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</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">search_result</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">location_if_file</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"at "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::to_text_relative</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">search_result</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">location_if_file</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::up</span><span class="plain-syntax">(</span><a href="5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::materials_path</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">)));</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">search_result</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">location_if_path</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"at "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::relative_URL</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Pathnames::up</span><span class="plain-syntax">(</span><a href="5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::materials_path</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">)),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">search_result</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">location_if_path</span><span class="plain-syntax">);</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::list_attached_errors_to_HTML</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">search_result</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"li"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"ul"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-ti.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionInstaller::show_extensions</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">ExtensionInstaller::show_extensions</span></span>:<br/><a href="7-ti.html#SP2_5_1">&#167;2.5.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">scan_count</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">built_in</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">built_in_count</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">installed</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">installed_count</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">required</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">requirements_count</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="constant-syntax">COPY_VERTEX</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre</span><span class="plain-syntax"> == </span><span class="identifier-syntax">extension_genre</span><span class="plain-syntax">) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre</span><span class="plain-syntax"> == </span><span class="identifier-syntax">extension_bundle_genre</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">last_scanned</span><span class="plain-syntax"> != </span><span class="identifier-syntax">scan_count</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">required</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">last_scanned</span><span class="plain-syntax"> = </span><span class="identifier-syntax">scan_count</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nest_of_origin</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><a href="2-nst.html#SP2" class="function-link"><span class="function-syntax">Nests::get_tag</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nest_of_origin</span><span class="plain-syntax">) == </span><span class="constant-syntax">INTERNAL_NEST_TAG</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> (*</span><span class="identifier-syntax">built_in_count</span><span class="plain-syntax">)++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">built_in</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">built_in_count</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", "</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 v%v"</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">, &amp;(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> (*</span><span class="identifier-syntax">installed_count</span><span class="plain-syntax">)++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">installed</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">"li"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP6" class="function-link"><span class="function-syntax">Copies::write_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"li"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="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">V</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="constant-syntax">REQUIREMENT_VERTEX</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">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_requirement</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre</span><span class="plain-syntax"> == </span><span class="identifier-syntax">extension_genre</span><span class="plain-syntax">) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_requirement</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre</span><span class="plain-syntax"> == </span><span class="identifier-syntax">extension_bundle_genre</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> (*</span><span class="identifier-syntax">requirements_count</span><span class="plain-syntax">)++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">required</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">"li"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-wrk.html#SP6" class="function-link"><span class="function-syntax">Works::write</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_requirement</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">VersionNumberRanges::is_any_range</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_requirement</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version_range</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" (need version in range "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VersionNumberRanges::write_range</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_requirement</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version_range</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</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">" (any version will do)"</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">"li"</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">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">W</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">build_edges</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="7-ti.html#SP3" class="function-link"><span class="function-syntax">ExtensionInstaller::show_extensions</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">scan_count</span><span class="plain-syntax">, </span><span class="identifier-syntax">built_in</span><span class="plain-syntax">, </span><span class="identifier-syntax">built_in_count</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">installed</span><span class="plain-syntax">, </span><span class="identifier-syntax">installed_count</span><span class="plain-syntax">, </span><span class="identifier-syntax">required</span><span class="plain-syntax">, </span><span class="identifier-syntax">requirements_count</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">use_edges</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="7-ti.html#SP3" class="function-link"><span class="function-syntax">ExtensionInstaller::show_extensions</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">scan_count</span><span class="plain-syntax">, </span><span class="identifier-syntax">built_in</span><span class="plain-syntax">, </span><span class="identifier-syntax">built_in_count</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">installed</span><span class="plain-syntax">, </span><span class="identifier-syntax">installed_count</span><span class="plain-syntax">, </span><span class="identifier-syntax">required</span><span class="plain-syntax">, </span><span class="identifier-syntax">requirements_count</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionInstaller::seek_extension_in_graph</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">ExtensionInstaller::seek_extension_in_graph</span></span>:<br/><a href="7-ti.html#SP2_5_2">&#167;2.5.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</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">V</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type</span><span class="plain-syntax"> == </span><span class="constant-syntax">COPY_VERTEX</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">VC</span><span class="plain-syntax"> = </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-edt.html#SP4" class="function-link"><span class="function-syntax">Editions::cmp</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">, </span><span class="identifier-syntax">VC</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</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">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">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">W</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">build_edges</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-ti.html#SP4" class="function-link"><span class="function-syntax">ExtensionInstaller::seek_extension_in_graph</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</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="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">use_edges</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-ti.html#SP4" class="function-link"><span class="function-syntax">ExtensionInstaller::seek_extension_in_graph</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="7-eip.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresssection"><a href="7-tm.html">tm</a></li><li class="progresssection"><a href="7-eip.html">eip</a></li><li class="progresscurrent">ti</li><li class="progresssection"><a href="7-dt.html">dt</a></li><li class="progresssection"><a href="7-dc.html">dc</a></li><li class="progresssection"><a href="7-dr.html">dr</a></li><li class="progressnext"><a href="7-dt.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>
</body>
</html>

View file

@ -88,20 +88,20 @@ the census, to be on the safe side.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionWebsite::update</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">ExtensionWebsite::update</span></span>:<br/>The Report - <a href="7-tr.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionWebsite::update</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">ExtensionWebsite::update</span></span>:<br/>The Installer - <a href="7-ti.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">EXTENSIONS_CENSUS</span><span class="plain-syntax">, </span><span class="string-syntax">"Updating extensions documentation for project\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::set_link_abbreviation_path</span><span class="plain-syntax">(</span><a href="5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::path</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="7-ip.html#SP1" class="function-link"><span class="function-syntax">ExtensionIndex::write</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-eip.html#SP1" class="function-link"><span class="function-syntax">ExtensionIndex::write</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</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">E</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax">, </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">extensions_included</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="7-ip2.html#SP1" class="function-link"><span class="function-syntax">ExtensionPages::document_extension</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">proj</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-tm.html#SP7" class="function-link"><span class="function-syntax">ExtensionWebsite::document_extension</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">proj</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">census</span><span class="plain-syntax"> = </span><a href="5-ps2.html#SP39" class="function-link"><span class="function-syntax">Projects::perform_census</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> *</span><span class="identifier-syntax">res</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax">, </span><span class="identifier-syntax">census</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="7-ip2.html#SP1" class="function-link"><span class="function-syntax">ExtensionPages::document_extension</span></a><span class="plain-syntax">(</span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">), </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">proj</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-tm.html#SP7" class="function-link"><span class="function-syntax">ExtensionWebsite::document_extension</span></a><span class="plain-syntax">(</span><a href="5-es.html#SP4" class="function-link"><span class="function-syntax">Extensions::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">), </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">proj</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>The top-level index page is at this filename.
@ -123,7 +123,7 @@ That returns <span class="extract"><span class="extract-syntax">NULL</span></spa
<span class="plain-syntax"> </span><span class="reserved-syntax">return</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">"Extensions.html"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionWebsite::cut_way_for_index_page</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">ExtensionWebsite::cut_way_for_index_page</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionWebsite::cut_way_for_index_page</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">ExtensionWebsite::cut_way_for_index_page</span></span>:<br/>Extensions Index Page - <a href="7-eip.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</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">proj</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no project"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><a href="7-tm.html#SP4" class="function-link"><span class="function-syntax">ExtensionWebsite::path_to_site</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
@ -158,18 +158,18 @@ examples provided in the extension.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionWebsite::page_filename</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">ExtensionWebsite::page_filename</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1_2_2_4_4_1">&#167;1.2.2.4.4.1</a><br/>The Report - <a href="7-tr.html#SP2_4_2_1">&#167;2.4.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">edition</span><span class="plain-syntax">,</span>
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionWebsite::page_filename</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">ExtensionWebsite::page_filename</span></span>:<br/>Extensions Index Page - <a href="7-eip.html#SP1_2_2_4_4_1">&#167;1.2.2.4.4.1</a><br/>The Installer - <a href="7-ti.html#SP2_4_2_1">&#167;2.4.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">edition</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">eg_number</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">proj</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no project"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="7-tm.html#SP6" class="function-link"><span class="function-syntax">ExtensionWebsite::page_filename_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="identifier-syntax">edition</span><span class="plain-syntax">, </span><span class="identifier-syntax">eg_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionWebsite::page_filename_relative_to_materials</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">ExtensionWebsite::page_filename_relative_to_materials</span></span>:<br/>Index Pages - <a href="7-ip.html#SP1_2_2_4_4_1">&#167;1.2.2.4.4.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">edition</span><span class="plain-syntax">,</span>
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionWebsite::page_filename_relative_to_materials</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">ExtensionWebsite::page_filename_relative_to_materials</span></span>:<br/>Extensions Index Page - <a href="7-eip.html#SP1_2_2_4_4_1">&#167;1.2.2.4.4.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">edition</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">eg_number</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="7-tm.html#SP6" class="function-link"><span class="function-syntax">ExtensionWebsite::page_filename_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">edition</span><span class="plain-syntax">, </span><span class="identifier-syntax">eg_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionWebsite::cut_way_for_page</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ExtensionWebsite::cut_way_for_page</span></span>:<br/>Individual Pages - <a href="7-ip2.html#SP2">&#167;2</a>, <a href="7-ip2.html#SP2_1_1">&#167;2.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">,</span>
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">ExtensionWebsite::cut_way_for_page</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ExtensionWebsite::cut_way_for_page</span></span>:<br/><a href="7-tm.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">edition</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">eg_number</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">proj</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no project"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="7-tm.html#SP6" class="function-link"><span class="function-syntax">ExtensionWebsite::page_filename_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="identifier-syntax">edition</span><span class="plain-syntax">, </span><span class="identifier-syntax">eg_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
@ -200,8 +200,92 @@ examples provided in the extension.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">F</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>And this is where extension documentation is kicked off.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionWebsite::document_extension</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">ExtensionWebsite::document_extension</span></span>:<br/><a href="7-tm.html#SP2">&#167;2</a><br/>The Installer - <a href="7-ti.html#SP2_4_2_1">&#167;2.4.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">force_update</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no extension"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">proj</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no project"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">documented_on_this_run</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">edition</span><span class="plain-syntax"> = </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax"> = </span><span class="identifier-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">errors_reading_source_text</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Not writing documentation on %X because it has copy errors\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">work</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Writing documentation on %X\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">work</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">edition</span><span class="plain-syntax"> = </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><a href="7-tm.html#SP5" class="function-link"><span class="function-syntax">ExtensionWebsite::cut_way_for_page</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="identifier-syntax">edition</span><span class="plain-syntax">, -1);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">F</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Pathnames::create_in_file_system</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">compiled_documentation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">doc</span><span class="plain-syntax"> = </span><a href="5-es.html#SP11" class="function-link"><span class="function-syntax">Extensions::get_documentation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">details</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">IndexExtensions::document_in_detail</span><span class="plain-syntax">(</span><span class="identifier-syntax">details</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">details</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"hr"</span><span class="plain-syntax">); </span><span class="comment-syntax"> ruled line at top of extras</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"extensionsubheading\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"defined these in the last run"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">details</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">details</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP3" class="function-link"><span class="function-syntax">DocumentationRenderer::as_HTML</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">doc</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">documented_on_this_run</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">EXW_breadcrumb_titles</span><span class="plain-syntax">[5] = { </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> };</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">EXW_breakcrumb_URLs</span><span class="plain-syntax">[5] = { </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> };</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">no_EXW_breadcrumbs</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionWebsite::add_home_breadcrumb</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">ExtensionWebsite::add_home_breadcrumb</span></span>:<br/>Extensions Index Page - <a href="7-eip.html#SP1_2">&#167;1.2</a><br/>The Installer - <a href="7-ti.html#SP1">&#167;1</a><br/>Documentation Renderer - <a href="7-dr.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">title</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">title</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">title</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"Extensions"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="7-tm.html#SP7" class="function-link"><span class="function-syntax">ExtensionWebsite::add_breadcrumb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"inform:/Extensions/Reserved/Documentation/Extensions.html"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionWebsite::add_breadcrumb</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">ExtensionWebsite::add_breadcrumb</span></span>:<br/>The Installer - <a href="7-ti.html#SP1">&#167;1</a><br/>Documentation Renderer - <a href="7-dr.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">URL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">no_EXW_breadcrumbs</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">5</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"too many breadcrumbs"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EXW_breadcrumb_titles</span><span class="plain-syntax">[</span><span class="identifier-syntax">no_EXW_breadcrumbs</span><span class="plain-syntax">] = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EXW_breakcrumb_URLs</span><span class="plain-syntax">[</span><span class="identifier-syntax">no_EXW_breadcrumbs</span><span class="plain-syntax">] = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">URL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">no_EXW_breadcrumbs</span><span class="plain-syntax">++;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionWebsite::titling_and_navigation</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">ExtensionWebsite::titling_and_navigation</span></span>:<br/>Extensions Index Page - <a href="7-eip.html#SP1_2">&#167;1.2</a><br/>The Installer - <a href="7-ti.html#SP1">&#167;1</a><br/>Documentation Renderer - <a href="7-dr.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subtitle</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"headingpanellayout headingpanelalt\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"headingtext\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"headingpaneltextalt"</span><span class="plain-syntax">);</span>
<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">no_EXW_breadcrumbs</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax">&gt;0) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" &amp;gt; "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">i</span><span class="plain-syntax"> != </span><span class="identifier-syntax">no_EXW_breadcrumbs</span><span class="plain-syntax">-1) &amp;&amp; (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">EXW_breakcrumb_URLs</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"href=\"%S\" class=\"registrycontentslink\""</span><span class="plain-syntax">, </span><span class="identifier-syntax">EXW_breakcrumb_URLs</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">EXW_breadcrumb_titles</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">i</span><span class="plain-syntax"> != </span><span class="identifier-syntax">no_EXW_breadcrumbs</span><span class="plain-syntax">-1) &amp;&amp; (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">EXW_breakcrumb_URLs</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"headingrubric\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"headingpanelrubricalt"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-dr.html#SP10" class="function-link"><span class="function-syntax">DocumentationRenderer::render_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">subtitle</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::end_span</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"div"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">no_EXW_breadcrumbs</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="6-vmg.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresscurrent">tm</li><li class="progresssection"><a href="7-ip.html">ip</a></li><li class="progresssection"><a href="7-ip2.html">ip2</a></li><li class="progresssection"><a href="7-tr.html">tr</a></li><li class="progressnext"><a href="7-ip.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="6-vmg.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresscurrent">tm</li><li class="progresssection"><a href="7-eip.html">eip</a></li><li class="progresssection"><a href="7-ti.html">ti</a></li><li class="progresssection"><a href="7-dt.html">dt</a></li><li class="progresssection"><a href="7-dc.html">dc</a></li><li class="progresssection"><a href="7-dr.html">dr</a></li><li class="progressnext"><a href="7-eip.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -306,20 +306,30 @@
<span class="sectionpurpose">To refresh the mini-website of available extensions presented in the Inform GUI applications.</span></p>
</li>
<li>
<p class="sectionentry"><a href="7-ip.html">
<spon class="sectiontitle">Index Pages</span></a> -
<span class="sectionpurpose">To generate the two top-level pages in the extension mini-website.</span></p>
<p class="sectionentry"><a href="7-eip.html">
<spon class="sectiontitle">Extensions Index Page</span></a> -
<span class="sectionpurpose">To generate the index page for the extension mini-website, which is the home page displayed in the Extensions tab for the Inform GUI apps.</span></p>
</li>
<li>
<p class="sectionentry"><a href="7-ip2.html">
<spon class="sectiontitle">Individual Pages</span></a> -
<span class="sectionpurpose">To generate the individual pages on extensions in the extension mini-website.</span></p>
</li>
<li>
<p class="sectionentry"><a href="7-tr.html">
<spon class="sectiontitle">The Report</span></a> -
<p class="sectionentry"><a href="7-ti.html">
<spon class="sectiontitle">The Installer</span></a> -
<span class="sectionpurpose">To produce a report page of HTML for use in the Inform GUI apps, when a resource such as an extension is inspected or installed.</span></p>
</li>
<li>
<p class="sectionentry"><a href="7-dt.html">
<spon class="sectiontitle">Documentation Tree</span></a> -
<span class="sectionpurpose">A data structure to hold segments of Inform resource documentation.</span></p>
</li>
<li>
<p class="sectionentry"><a href="7-dc.html">
<spon class="sectiontitle">Documentation Compiler</span></a> -
<span class="sectionpurpose">To compile documentation from the textual syntax in an extension into a tree.</span></p>
</li>
<li>
<p class="sectionentry"><a href="7-dr.html">
<spon class="sectiontitle">Documentation Renderer</span></a> -
<span class="sectionpurpose">To render a passage of extension documentation as HTML.</span></p>
</li>
</ul>
</li>
</ul>

View file

@ -117,6 +117,7 @@ possible meaning as a literal integer, we cache the result: for instance,
<span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CLOSEBRACKET_V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">COLON_V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">COMMA_V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">DOCUMENTATION_V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">DOUBLEDASH_V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">FORWARDSLASH_V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">FULLSTOP_V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
@ -126,6 +127,7 @@ possible meaning as a literal integer, we cache the result: for instance,
<span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OPENI6_V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PARBREAK_V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PLUS_V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">QUADRUPLEDASH_V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">RIGHTARROW_V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">SEMICOLON_V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">STROKE_V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
@ -135,6 +137,7 @@ possible meaning as a literal integer, we cache the result: for instance,
<span class="plain-syntax"> </span><span class="identifier-syntax">CLOSEBRACKET_V</span><span class="plain-syntax"> = </span><a href="2-vcb.html#SP15" class="function-link"><span class="function-syntax">Vocabulary::entry_for_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="string-syntax">")"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COLON_V</span><span class="plain-syntax"> = </span><a href="2-vcb.html#SP15" class="function-link"><span class="function-syntax">Vocabulary::entry_for_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="string-syntax">":"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMMA_V</span><span class="plain-syntax"> = </span><a href="2-vcb.html#SP15" class="function-link"><span class="function-syntax">Vocabulary::entry_for_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="string-syntax">","</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DOCUMENTATION_V</span><span class="plain-syntax"> = </span><a href="2-vcb.html#SP15" class="function-link"><span class="function-syntax">Vocabulary::entry_for_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="string-syntax">"documentation"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DOUBLEDASH_V</span><span class="plain-syntax"> = </span><a href="2-vcb.html#SP15" class="function-link"><span class="function-syntax">Vocabulary::entry_for_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="string-syntax">"--"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">FORWARDSLASH_V</span><span class="plain-syntax"> = </span><a href="2-vcb.html#SP15" class="function-link"><span class="function-syntax">Vocabulary::entry_for_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="string-syntax">"/"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">FULLSTOP_V</span><span class="plain-syntax"> = </span><a href="2-vcb.html#SP15" class="function-link"><span class="function-syntax">Vocabulary::entry_for_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="string-syntax">"."</span><span class="plain-syntax">);</span>
@ -144,6 +147,7 @@ possible meaning as a literal integer, we cache the result: for instance,
<span class="plain-syntax"> </span><span class="identifier-syntax">OPENI6_V</span><span class="plain-syntax"> = </span><a href="2-vcb.html#SP15" class="function-link"><span class="function-syntax">Vocabulary::entry_for_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="string-syntax">"(-"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PARBREAK_V</span><span class="plain-syntax"> = </span><a href="2-vcb.html#SP15" class="function-link"><span class="function-syntax">Vocabulary::entry_for_text</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PARAGRAPH_BREAK</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUS_V</span><span class="plain-syntax"> = </span><a href="2-vcb.html#SP15" class="function-link"><span class="function-syntax">Vocabulary::entry_for_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="string-syntax">"+"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">QUADRUPLEDASH_V</span><span class="plain-syntax"> = </span><a href="2-vcb.html#SP15" class="function-link"><span class="function-syntax">Vocabulary::entry_for_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="string-syntax">"----"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RIGHTARROW_V</span><span class="plain-syntax"> = </span><a href="2-vcb.html#SP15" class="function-link"><span class="function-syntax">Vocabulary::entry_for_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="string-syntax">"-&gt;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SEMICOLON_V</span><span class="plain-syntax"> = </span><a href="2-vcb.html#SP15" class="function-link"><span class="function-syntax">Vocabulary::entry_for_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="string-syntax">";"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">STROKE_V</span><span class="plain-syntax"> = </span><a href="2-vcb.html#SP15" class="function-link"><span class="function-syntax">Vocabulary::entry_for_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="string-syntax">"|"</span><span class="plain-syntax">);</span>
@ -178,7 +182,7 @@ routines, either on a single word or on a range.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Vocabulary::identify_word</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Vocabulary::identify_word</span></span>:<br/><a href="2-vcb.html#SP4">&#167;4</a><br/>Numbered Words - <a href="2-nw.html#SP7">&#167;7</a><br/>Lexer - <a href="3-lxr.html#SP27_5_2">&#167;27.5.2</a>, <a href="3-lxr.html#SP27_6">&#167;27.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">wn</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Vocabulary::identify_word</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Vocabulary::identify_word</span></span>:<br/><a href="2-vcb.html#SP4">&#167;4</a><br/>Numbered Words - <a href="2-nw.html#SP7">&#167;7</a><br/>Lexer - <a href="3-lxr.html#SP28_5_2">&#167;28.5.2</a>, <a href="3-lxr.html#SP28_6">&#167;28.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">wn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ve</span><span class="plain-syntax"> = </span><a href="2-vcb.html#SP15" class="function-link"><span class="function-syntax">Vocabulary::entry_for_text</span></a><span class="plain-syntax">(</span><a href="3-lxr.html#SP19" class="function-link"><span class="function-syntax">Lexer::word_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">wn</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ve</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">raw_exemplar</span><span class="plain-syntax"> = </span><a href="3-lxr.html#SP19" class="function-link"><span class="function-syntax">Lexer::word_raw_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">wn</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP19" class="function-link"><span class="function-syntax">Lexer::set_word</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">wn</span><span class="plain-syntax">, </span><span class="identifier-syntax">ve</span><span class="plain-syntax">);</span>

View file

@ -121,7 +121,7 @@ function, written two ways:
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">last_cr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">text</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">-1]; </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">last_cr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EOF</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">text</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cr</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">next_cr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">text</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">+1]; </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">next_cr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EOF</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP26" class="function-link"><span class="function-syntax">Lexer::feed_triplet</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">last_cr</span><span class="plain-syntax">, </span><span class="identifier-syntax">cr</span><span class="plain-syntax">, </span><span class="identifier-syntax">next_cr</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP27" class="function-link"><span class="function-syntax">Lexer::feed_triplet</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">last_cr</span><span class="plain-syntax">, </span><span class="identifier-syntax">cr</span><span class="plain-syntax">, </span><span class="identifier-syntax">next_cr</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-fds.html#SP4_2" class="named-paragraph-link"><span class="named-paragraph">Extract results from the lexer</span><span class="named-paragraph-number">4.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -133,7 +133,7 @@ function, written two ways:
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">last_cr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">-1); </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">last_cr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EOF</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cr</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">next_cr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">+1); </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">next_cr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EOF</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP26" class="function-link"><span class="function-syntax">Lexer::feed_triplet</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">last_cr</span><span class="plain-syntax">, </span><span class="identifier-syntax">cr</span><span class="plain-syntax">, </span><span class="identifier-syntax">next_cr</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP27" class="function-link"><span class="function-syntax">Lexer::feed_triplet</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">last_cr</span><span class="plain-syntax">, </span><span class="identifier-syntax">cr</span><span class="plain-syntax">, </span><span class="identifier-syntax">next_cr</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-fds.html#SP4_2" class="named-paragraph-link"><span class="named-paragraph">Extract results from the lexer</span><span class="named-paragraph-number">4.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -169,7 +169,7 @@ need for a feed at all:
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Feeds::feed_wording</span><span class="plain-syntax">(</span><span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-lxr.html#SP29" class="function-link"><span class="function-syntax">Lexer::splice_words</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-lxr.html#SP30" class="function-link"><span class="function-syntax">Lexer::splice_words</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">

View file

@ -59,7 +59,7 @@ function togglePopup(material_id) {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../services.html">Services</a></li><li><a href="index.html">words</a></li><li><a href="index.html#3">Chapter 3: Words in Sequence</a></li><li><b>Lexer</b></li></ul></div>
<p class="purpose">To break down a stream of characters into a numbered sequence of words, literal strings and literal I6 inclusions, removing comments and unnecessary whitespace.</p>
<ul class="toc"><li><a href="3-lxr.html#SP6">&#167;6. The lexical structure of source text</a></li><li><a href="3-lxr.html#SP10">&#167;10. What the lexer stores for each word</a></li><li><a href="3-lxr.html#SP16">&#167;16. External lexer states</a></li><li><a href="3-lxr.html#SP17">&#167;17. Definition of punctuation</a></li><li><a href="3-lxr.html#SP18">&#167;18. Definition of indentation</a></li><li><a href="3-lxr.html#SP19">&#167;19. Access functions</a></li><li><a href="3-lxr.html#SP20">&#167;20. Definition of white space</a></li><li><a href="3-lxr.html#SP21">&#167;21. Internal lexer states</a></li><li><a href="3-lxr.html#SP25">&#167;25. Feeding the lexer</a></li><li><a href="3-lxr.html#SP27">&#167;27. Lexing one character at a time</a></li><li><a href="3-lxr.html#SP27_1">&#167;27.1. Dealing with whitespace</a></li><li><a href="3-lxr.html#SP27_5">&#167;27.5. Completing a word</a></li><li><a href="3-lxr.html#SP27_6">&#167;27.6. Entering and leaving literal mode</a></li><li><a href="3-lxr.html#SP27_8">&#167;27.8. Breaking strings up at text substitutions</a></li><li><a href="3-lxr.html#SP29">&#167;29. Splicing</a></li><li><a href="3-lxr.html#SP30">&#167;30. Basic command-line error handler</a></li><li><a href="3-lxr.html#SP31">&#167;31. Logging absolutely everything</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="3-lxr.html#SP6">&#167;6. The lexical structure of source text</a></li><li><a href="3-lxr.html#SP10">&#167;10. What the lexer stores for each word</a></li><li><a href="3-lxr.html#SP16">&#167;16. External lexer states</a></li><li><a href="3-lxr.html#SP17">&#167;17. Definition of punctuation</a></li><li><a href="3-lxr.html#SP18">&#167;18. Definition of indentation</a></li><li><a href="3-lxr.html#SP19">&#167;19. Access functions</a></li><li><a href="3-lxr.html#SP20">&#167;20. Definition of white space</a></li><li><a href="3-lxr.html#SP21">&#167;21. Internal lexer states</a></li><li><a href="3-lxr.html#SP25">&#167;25. Feeding the lexer</a></li><li><a href="3-lxr.html#SP28">&#167;28. Lexing one character at a time</a></li><li><a href="3-lxr.html#SP28_1">&#167;28.1. Dealing with whitespace</a></li><li><a href="3-lxr.html#SP28_5">&#167;28.5. Completing a word</a></li><li><a href="3-lxr.html#SP28_6">&#167;28.6. Entering and leaving literal mode</a></li><li><a href="3-lxr.html#SP28_8">&#167;28.8. Breaking strings up at text substitutions</a></li><li><a href="3-lxr.html#SP30">&#167;30. Splicing</a></li><li><a href="3-lxr.html#SP31">&#167;31. Basic command-line error handler</a></li><li><a href="3-lxr.html#SP32">&#167;32. Logging absolutely everything</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>Lexical analysis is the process of reading characters from the source
text files and forming them into globs which we call "words": the part of
@ -321,7 +321,7 @@ upper limits.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">current_lw_array_size</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">next_lw_array_size</span><span class="plain-syntax"> = </span><span class="constant-syntax">75000</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lexer::ensure_space_up_to</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">Lexer::ensure_space_up_to</span></span>:<br/><a href="3-lxr.html#SP12">&#167;12</a>, <a href="3-lxr.html#SP27_5_2">&#167;27.5.2</a>, <a href="3-lxr.html#SP29">&#167;29</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lexer::ensure_space_up_to</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">Lexer::ensure_space_up_to</span></span>:<br/><a href="3-lxr.html#SP12">&#167;12</a>, <a href="3-lxr.html#SP28_5_2">&#167;28.5.2</a>, <a href="3-lxr.html#SP30">&#167;30</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">current_lw_array_size</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</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">new_size</span><span class="plain-syntax"> = </span><span class="identifier-syntax">current_lw_array_size</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">n</span><span class="plain-syntax"> &gt;= </span><span class="identifier-syntax">new_size</span><span class="plain-syntax">) {</span>
@ -333,7 +333,7 @@ upper limits.
<span class="plain-syntax"> ((</span><span class="reserved-syntax">lexer_details</span><span class="plain-syntax"> *) (</span><span class="identifier-syntax">Memory::calloc</span><span class="plain-syntax">(</span><span class="identifier-syntax">new_size</span><span class="plain-syntax">, </span><span class="reserved-syntax">sizeof</span><span class="plain-syntax">(</span><span class="reserved-syntax">lexer_details</span><span class="plain-syntax">), </span><span class="constant-syntax">LEXER_WORDS_MREASON</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">new_lw_array</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP30" class="function-link"><span class="function-syntax">Lexer::lexer_problem_handler</span></a><span class="plain-syntax">(</span><span class="constant-syntax">MEMORY_OUT_LEXERERROR</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP31" class="function-link"><span class="function-syntax">Lexer::lexer_problem_handler</span></a><span class="plain-syntax">(</span><span class="constant-syntax">MEMORY_OUT_LEXERERROR</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">exit</span><span class="plain-syntax">(1); </span><span class="comment-syntax"> in case the handler fails to do this</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">new_size</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
@ -361,7 +361,7 @@ of lookahead:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lexer::ensure_lexer_hwm_can_be_raised_by</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Lexer::ensure_lexer_hwm_can_be_raised_by</span></span>:<br/><a href="3-lxr.html#SP15">&#167;15</a>, <a href="3-lxr.html#SP27">&#167;27</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">transfer_partial_word</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lexer::ensure_lexer_hwm_can_be_raised_by</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Lexer::ensure_lexer_hwm_can_be_raised_by</span></span>:<br/><a href="3-lxr.html#SP15">&#167;15</a>, <a href="3-lxr.html#SP28">&#167;28</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">transfer_partial_word</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">lexer_hwm</span><span class="plain-syntax"> + </span><span class="identifier-syntax">n</span><span class="plain-syntax"> + </span><span class="constant-syntax">2</span><span class="plain-syntax"> &gt;= </span><span class="identifier-syntax">lexer_workspace_end</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">old_hwm</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lexer_hwm</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">m</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
@ -458,7 +458,7 @@ or not depends slightly on the context:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Lexer::is_punctuation</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Lexer::is_punctuation</span></span>:<br/><a href="3-lxr.html#SP26">&#167;26</a><br/>Text From Files - <a href="3-tff.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Lexer::is_punctuation</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Lexer::is_punctuation</span></span>:<br/><a href="3-lxr.html#SP27">&#167;27</a><br/>Text From Files - <a href="3-tff.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="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">lexer_punctuation_marks</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</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="identifier-syntax">lexer_punctuation_marks</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
@ -480,7 +480,7 @@ distinguished. We'll do this with the letters <span class="extract"><span class=
<span class="plain-syntax"> </span><span class="reserved-syntax">return</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="function-syntax">Lexer::break_char_for_indents</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Lexer::break_char_for_indents</span></span>:<br/><a href="3-lxr.html#SP27_2">&#167;27.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Lexer::break_char_for_indents</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Lexer::break_char_for_indents</span></span>:<br/><a href="3-lxr.html#SP28_2">&#167;28.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</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">t</span><span class="plain-syntax"> &lt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"bad indentation break"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">t</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">26</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="character-syntax">'Z'</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="character-syntax">'A'</span><span class="plain-syntax"> + </span><span class="identifier-syntax">t</span><span class="plain-syntax"> - </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
@ -497,7 +497,7 @@ distinguished. We'll do this with the letters <span class="extract"><span class=
<span class="plain-syntax"> </span><span class="identifier-syntax">lw_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">wn</span><span class="plain-syntax">].</span><span class="element-syntax">lw_identity</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ve</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Lexer::break_before</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Lexer::break_before</span></span>:<br/><a href="3-lxr.html#SP31">&#167;31</a><br/>Wordings - <a href="3-wrd.html#SP20">&#167;20</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">wn</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Lexer::break_before</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Lexer::break_before</span></span>:<br/><a href="3-lxr.html#SP32">&#167;32</a><br/>Wordings - <a href="3-wrd.html#SP20">&#167;20</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">wn</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">lw_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">wn</span><span class="plain-syntax">].</span><span class="element-syntax">lw_break</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -540,7 +540,7 @@ distinguished. We'll do this with the letters <span class="extract"><span class=
<span class="plain-syntax"> </span><span class="identifier-syntax">lw_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">wn</span><span class="plain-syntax">].</span><span class="element-syntax">lw_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">rt</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lexer::word_copy</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">Lexer::word_copy</span></span>:<br/><a href="3-lxr.html#SP29">&#167;29</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lexer::word_copy</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">Lexer::word_copy</span></span>:<br/><a href="3-lxr.html#SP30">&#167;30</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lw_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">to</span><span class="plain-syntax">] = </span><span class="identifier-syntax">lw_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">from</span><span class="plain-syntax">];</span>
<span class="plain-syntax">}</span>
@ -712,14 +712,14 @@ least one paragraph, even if a blank one.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">extra_padding</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP27" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">' '</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP28" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">' '</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP27" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">' '</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP27" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">'\n'</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP27" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">'\n'</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP27" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">'\n'</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP27" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">'\n'</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP27" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">' '</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP28" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">' '</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP28" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">'\n'</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP28" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">'\n'</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP28" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">'\n'</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP28" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">'\n'</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP28" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">' '</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP25">&#167;25</a>.</li></ul>
@ -747,15 +747,30 @@ be a bug, and Inform is bug-free, so it follows that it could never happen.
<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">lxs_kind_of_word</span><span class="plain-syntax"> == </span><span class="constant-syntax">STRING_KW</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP30" class="function-link"><span class="function-syntax">Lexer::lexer_problem_handler</span></a><span class="plain-syntax">(</span><span class="constant-syntax">STRING_NEVER_ENDS_LEXERERROR</span><span class="plain-syntax">, </span><span class="identifier-syntax">problem_source_description</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP31" class="function-link"><span class="function-syntax">Lexer::lexer_problem_handler</span></a><span class="plain-syntax">(</span><span class="constant-syntax">STRING_NEVER_ENDS_LEXERERROR</span><span class="plain-syntax">, </span><span class="identifier-syntax">problem_source_description</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">lxs_kind_of_word</span><span class="plain-syntax"> == </span><span class="constant-syntax">COMMENT_KW</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP30" class="function-link"><span class="function-syntax">Lexer::lexer_problem_handler</span></a><span class="plain-syntax">(</span><span class="constant-syntax">COMMENT_NEVER_ENDS_LEXERERROR</span><span class="plain-syntax">, </span><span class="identifier-syntax">problem_source_description</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP31" class="function-link"><span class="function-syntax">Lexer::lexer_problem_handler</span></a><span class="plain-syntax">(</span><span class="constant-syntax">COMMENT_NEVER_ENDS_LEXERERROR</span><span class="plain-syntax">, </span><span class="identifier-syntax">problem_source_description</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">lxs_kind_of_word</span><span class="plain-syntax"> == </span><span class="constant-syntax">I6_INCLUSION_KW</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP30" class="function-link"><span class="function-syntax">Lexer::lexer_problem_handler</span></a><span class="plain-syntax">(</span><span class="constant-syntax">I6_NEVER_ENDS_LEXERERROR</span><span class="plain-syntax">, </span><span class="identifier-syntax">problem_source_description</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP31" class="function-link"><span class="function-syntax">Lexer::lexer_problem_handler</span></a><span class="plain-syntax">(</span><span class="constant-syntax">I6_NEVER_ENDS_LEXERERROR</span><span class="plain-syntax">, </span><span class="identifier-syntax">problem_source_description</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lxs_kind_of_word</span><span class="plain-syntax"> = </span><span class="constant-syntax">ORDINARY_KW</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP25">&#167;25</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP26" class="paragraph-anchor"></a><b>&#167;26. </b>The feeder routine is required to send us a triple each time: <span class="extract"><span class="extract-syntax">cr</span></span>
<p class="commentary firstcommentary"><a id="SP26" class="paragraph-anchor"></a><b>&#167;26. </b>This slightly crudely (well, very crudely) detects whether the
<span class="extract"><span class="extract-syntax">---- DOCUMENTATION ----</span></span> tear-off marker has been reached in source text.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Lexer::detect_tear_off</span><button class="popup" onclick="togglePopup('usagePopup23')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup23">Usage of <span class="code-font"><span class="function-syntax">Lexer::detect_tear_off</span></span>:<br/>Text From Files - <a href="3-tff.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lexer_feed_started_at</span><span class="plain-syntax"> == -1) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no feed is active"</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">lexer_wordcount</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">lexer_feed_started_at</span><span class="plain-syntax"> + </span><span class="constant-syntax">3</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lw_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">lexer_wordcount</span><span class="plain-syntax">-3].</span><span class="element-syntax">lw_identity</span><span class="plain-syntax"> != </span><span class="identifier-syntax">QUADRUPLEDASH_V</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lw_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">lexer_wordcount</span><span class="plain-syntax">-2].</span><span class="element-syntax">lw_identity</span><span class="plain-syntax"> != </span><span class="identifier-syntax">DOCUMENTATION_V</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lw_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">lexer_wordcount</span><span class="plain-syntax">-1].</span><span class="element-syntax">lw_identity</span><span class="plain-syntax"> != </span><span class="identifier-syntax">QUADRUPLEDASH_V</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lexer_wordcount</span><span class="plain-syntax"> -= </span><span class="constant-syntax">3</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP27" class="paragraph-anchor"></a><b>&#167;27. </b>The feeder routine is required to send us a triple each time: <span class="extract"><span class="extract-syntax">cr</span></span>
must be a valid character (see above) and may not be <span class="extract"><span class="extract-syntax">EOF</span></span>; <span class="extract"><span class="extract-syntax">last_cr</span></span> must
be the previous one or else perhaps <span class="extract"><span class="extract-syntax">EOF</span></span> at the start of feed;
while <span class="extract"><span class="extract-syntax">next_cr</span></span> must be the next or else perhaps <span class="extract"><span class="extract-syntax">EOF</span></span> at the end of feed.
@ -788,7 +803,7 @@ most common URLs glue up as single words.)
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lexer::feed_triplet</span><button class="popup" onclick="togglePopup('usagePopup23')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup23">Usage of <span class="code-font"><span class="function-syntax">Lexer::feed_triplet</span></span>:<br/>Text From Files - <a href="3-tff.html#SP2">&#167;2</a><br/>Feeds - <a href="3-fds.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">last_cr</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cr</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">next_cr</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lexer::feed_triplet</span><button class="popup" onclick="togglePopup('usagePopup24')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup24">Usage of <span class="code-font"><span class="function-syntax">Lexer::feed_triplet</span></span>:<br/>Text From Files - <a href="3-tff.html#SP2">&#167;2</a><br/>Feeds - <a href="3-fds.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">last_cr</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cr</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">next_cr</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lxs_previous_char_in_raw_feed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">last_cr</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">space</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="3-lxr.html#SP17" class="function-link"><span class="function-syntax">Lexer::is_punctuation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cr</span><span class="plain-syntax">)) </span><span class="identifier-syntax">space</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
@ -808,16 +823,16 @@ most common URLs glue up as single words.)
<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">space</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP27" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">' '</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP27" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cr</span><span class="plain-syntax">); </span><span class="comment-syntax"> which might take us into literal mode, so to be careful...</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lxs_literal_mode</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><a href="3-lxr.html#SP27" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">' '</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><a href="3-lxr.html#SP27" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cr</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP28" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">' '</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP28" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cr</span><span class="plain-syntax">); </span><span class="comment-syntax"> which might take us into literal mode, so to be careful...</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lxs_literal_mode</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><a href="3-lxr.html#SP28" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">' '</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><a href="3-lxr.html#SP28" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cr</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">cr</span><span class="plain-syntax"> == </span><span class="character-syntax">'\n'</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">lexer_position</span><span class="plain-syntax">.</span><span class="element-syntax">file_of_origin</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lexer_position</span><span class="plain-syntax">.</span><span class="element-syntax">line_number</span><span class="plain-syntax">++;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP27" class="paragraph-anchor"></a><b>&#167;27. Lexing one character at a time. </b>We can think of characters as a stream of differently-coloured marbles,
<p class="commentary firstcommentary"><a id="SP28" class="paragraph-anchor"></a><b>&#167;28. Lexing one character at a time. </b>We can think of characters as a stream of differently-coloured marbles,
flowing from various sources into a hopper above our marble-sorting
machine. The hopper lets the marbles drop through one at a time into the
mechanism below, but inserts transparent glass marbles of its own on either
@ -847,22 +862,22 @@ extending to <span class="extract"><span class="extract-syntax">lexer_hwm-1</spa
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lexer::feed_char_into_lexer</span><button class="popup" onclick="togglePopup('usagePopup24')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup24">Usage of <span class="code-font"><span class="function-syntax">Lexer::feed_char_into_lexer</span></span>:<br/><a href="3-lxr.html#SP25_1">&#167;25.1</a>, <a href="3-lxr.html#SP26">&#167;26</a>, <a href="3-lxr.html#SP27_3">&#167;27.3</a>, <a href="3-lxr.html#SP27_8">&#167;27.8</a>, <a href="3-lxr.html#SP27_9">&#167;27.9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lexer::feed_char_into_lexer</span><button class="popup" onclick="togglePopup('usagePopup25')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup25">Usage of <span class="code-font"><span class="function-syntax">Lexer::feed_char_into_lexer</span></span>:<br/><a href="3-lxr.html#SP25_1">&#167;25.1</a>, <a href="3-lxr.html#SP27">&#167;27</a>, <a href="3-lxr.html#SP28_3">&#167;28.3</a>, <a href="3-lxr.html#SP28_8">&#167;28.8</a>, <a href="3-lxr.html#SP28_9">&#167;28.9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP14" class="function-link"><span class="function-syntax">Lexer::ensure_lexer_hwm_can_be_raised_by</span></a><span class="plain-syntax">(</span><span class="constant-syntax">MAX_WORD_LENGTH</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lxs_literal_mode</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-lxr.html#SP27_7" class="named-paragraph-link"><span class="named-paragraph">Contemplate leaving literal mode</span><span class="named-paragraph-number">27.7</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-lxr.html#SP28_7" class="named-paragraph-link"><span class="named-paragraph">Contemplate leaving literal mode</span><span class="named-paragraph-number">28.7</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lxs_kind_of_word</span><span class="plain-syntax"> == </span><span class="constant-syntax">STRING_KW</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-lxr.html#SP27_8" class="named-paragraph-link"><span class="named-paragraph">Force string division at the start of a text substitution, if necessary</span><span class="named-paragraph-number">27.8</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-lxr.html#SP27_4" class="named-paragraph-link"><span class="named-paragraph">Soak up whitespace around line breaks inside a literal string</span><span class="named-paragraph-number">27.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-lxr.html#SP28_8" class="named-paragraph-link"><span class="named-paragraph">Force string division at the start of a text substitution, if necessary</span><span class="named-paragraph-number">28.8</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-lxr.html#SP28_4" class="named-paragraph-link"><span class="named-paragraph">Soak up whitespace around line breaks inside a literal string</span><span class="named-paragraph-number">28.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> whitespace outside literal mode ends any partly built word and need not be recorded</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">lxs_literal_mode</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">is_whitespace</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-lxr.html#SP27_1" class="named-paragraph-link"><span class="named-paragraph">Admire the texture of the whitespace</span><span class="named-paragraph-number">27.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">lexer_word</span><span class="plain-syntax"> != </span><span class="identifier-syntax">lexer_hwm</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-lxr.html#SP27_5" class="named-paragraph-link"><span class="named-paragraph">Complete the current word</span><span class="named-paragraph-number">27.5</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">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\n'</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-lxr.html#SP27_3" class="named-paragraph-link"><span class="named-paragraph">Line break outside a literal</span><span class="named-paragraph-number">27.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-lxr.html#SP28_1" class="named-paragraph-link"><span class="named-paragraph">Admire the texture of the whitespace</span><span class="named-paragraph-number">28.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">lexer_word</span><span class="plain-syntax"> != </span><span class="identifier-syntax">lexer_hwm</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-lxr.html#SP28_5" class="named-paragraph-link"><span class="named-paragraph">Complete the current word</span><span class="named-paragraph-number">28.5</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">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\n'</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-lxr.html#SP28_3" class="named-paragraph-link"><span class="named-paragraph">Line break outside a literal</span><span class="named-paragraph-number">28.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
@ -870,19 +885,19 @@ extending to <span class="extract"><span class="extract-syntax">lexer_hwm-1</spa
<span class="plain-syntax"> *(</span><span class="identifier-syntax">lexer_hwm</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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lxs_scanning_text_substitution</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-lxr.html#SP27_9" class="named-paragraph-link"><span class="named-paragraph">Force string division at the end of a text substitution, if necessary</span><span class="named-paragraph-number">27.9</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-lxr.html#SP28_9" class="named-paragraph-link"><span class="named-paragraph">Force string division at the end of a text substitution, if necessary</span><span class="named-paragraph-number">28.9</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lxs_this_word_is_empty_so_far</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-lxr.html#SP27_2" class="named-paragraph-link"><span class="named-paragraph">Look at recent whitespace to see what break it followed</span><span class="named-paragraph-number">27.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-lxr.html#SP27_6" class="named-paragraph-link"><span class="named-paragraph">Contemplate entering literal mode</span><span class="named-paragraph-number">27.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-lxr.html#SP28_2" class="named-paragraph-link"><span class="named-paragraph">Look at recent whitespace to see what break it followed</span><span class="named-paragraph-number">28.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-lxr.html#SP28_6" class="named-paragraph-link"><span class="named-paragraph">Contemplate entering literal mode</span><span class="named-paragraph-number">28.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lxs_this_word_is_empty_so_far</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lxs_this_line_is_empty_so_far</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP27_1" class="paragraph-anchor"></a><b>&#167;27.1. Dealing with whitespace. </b>Let's deal with the different textures of whitespace first, as these are
<p class="commentary firstcommentary"><a id="SP28_1" class="paragraph-anchor"></a><b>&#167;28.1. Dealing with whitespace. </b>Let's deal with the different textures of whitespace first, as these are
surprisingly rich all by themselves.
</p>
@ -892,7 +907,7 @@ spaces; and it counts up the number of tabs it has seen (cancelling
back to none if a newline is found).
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Admire the texture of the whitespace</span><span class="named-paragraph-number">27.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Admire the texture of the whitespace</span><span class="named-paragraph-number">28.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -905,8 +920,8 @@ back to none if a newline is found).
<span class="plain-syntax"> </span><span class="identifier-syntax">lxs_most_significant_space_char</span><span class="plain-syntax"> = </span><span class="character-syntax">'\n'</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP27">&#167;27</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_2" class="paragraph-anchor"></a><b>&#167;27.2. </b>To recall: we need to know what kind of whitespace prefaces each word
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP28">&#167;28</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP28_2" class="paragraph-anchor"></a><b>&#167;28.2. </b>To recall: we need to know what kind of whitespace prefaces each word
the lexer records.
</p>
@ -915,7 +930,7 @@ but it probably follows a sequence of one or more whitespace characters,
and the code in the previous paragraph has been watching them for us.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Look at recent whitespace to see what break it followed</span><span class="named-paragraph-number">27.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Look at recent whitespace to see what break it followed</span><span class="named-paragraph-number">28.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -929,26 +944,26 @@ and the code in the previous paragraph has been watching them for us.
<span class="plain-syntax"> </span><span class="identifier-syntax">lxs_most_significant_space_char</span><span class="plain-syntax"> = </span><span class="character-syntax">' '</span><span class="plain-syntax">; </span><span class="comment-syntax"> waiting for the next run of whitespace, after this word</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lxs_number_of_tab_stops</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP27">&#167;27</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_3" class="paragraph-anchor"></a><b>&#167;27.3. </b>Line breaks are usually like any other white space, if we are outside
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP28">&#167;28</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP28_3" class="paragraph-anchor"></a><b>&#167;28.3. </b>Line breaks are usually like any other white space, if we are outside
literal mode, but we want to keep an eye out for paragraph breaks, because
these are sometimes semantically meaningful in Inform and so cannot be
discarded. A paragraph break is converted into a special "divider" word.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Line break outside a literal</span><span class="named-paragraph-number">27.3</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Line break outside a literal</span><span class="named-paragraph-number">28.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lxs_this_line_is_empty_so_far</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="constant-syntax">PARAGRAPH_BREAK</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP27" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PARAGRAPH_BREAK</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP27" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">' '</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP28" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PARAGRAPH_BREAK</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP28" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">' '</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lxs_this_line_is_empty_so_far</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP27">&#167;27</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_4" class="paragraph-anchor"></a><b>&#167;27.4. </b>When working through a literal string, a new-line together with any
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP28">&#167;28</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP28_4" class="paragraph-anchor"></a><b>&#167;28.4. </b>When working through a literal string, a new-line together with any
preceding whitespace is converted into a single space character, and we
enter "soak up spaces" mode: in which mode, any subsequent whitespace is
ignored until something else is reached. If we reach another new-line while
@ -959,7 +974,7 @@ paragraph breaks in literal strings are converted to codes which will make
Inform print a paragraph break at run-time.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Soak up whitespace around line breaks inside a literal string</span><span class="named-paragraph-number">27.4</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Soak up whitespace around line breaks inside a literal string</span><span class="named-paragraph-number">28.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -978,8 +993,8 @@ Inform print a paragraph break at run-time.
<span class="plain-syntax"> </span><span class="identifier-syntax">lxs_string_soak_up_spaces_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP27">&#167;27</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_5" class="paragraph-anchor"></a><b>&#167;27.5. Completing a word. </b>Outside of whitespace, then, our word (whatever it was &mdash; ordinary word,
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP28">&#167;28</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP28_5" class="paragraph-anchor"></a><b>&#167;28.5. Completing a word. </b>Outside of whitespace, then, our word (whatever it was &mdash; ordinary word,
literal string, I6 insertion or comment) has been stored character by
character at the steadily rising high water mark. We have now hit the end
by reaching whitespace (in the case of a literal, this has happened because
@ -988,7 +1003,7 @@ whitespace). The start of the word is at <span class="extract"><span class="extr
is stored just below <span class="extract"><span class="extract-syntax">lexer_hwm</span></span>.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Complete the current word</span><span class="named-paragraph-number">27.5</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Complete the current word</span><span class="named-paragraph-number">28.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -998,8 +1013,8 @@ is stored just below <span class="extract"><span class="extract-syntax">lexer_hw
<span class="plain-syntax"> </span><span class="identifier-syntax">lexer_wait_for_dashes</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="comment-syntax"> our long wait for documentation is over</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">lexer_wait_for_dashes</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">lxs_kind_of_word</span><span class="plain-syntax"> != </span><span class="constant-syntax">COMMENT_KW</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-lxr.html#SP27_5_1" class="named-paragraph-link"><span class="named-paragraph">Issue problem message and truncate if over maximum length for what it is</span><span class="named-paragraph-number">27.5.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-lxr.html#SP27_5_2" class="named-paragraph-link"><span class="named-paragraph">Store everything about the word except its break, which we already know</span><span class="named-paragraph-number">27.5.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-lxr.html#SP28_5_1" class="named-paragraph-link"><span class="named-paragraph">Issue problem message and truncate if over maximum length for what it is</span><span class="named-paragraph-number">28.5.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-lxr.html#SP28_5_2" class="named-paragraph-link"><span class="named-paragraph">Store everything about the word except its break, which we already know</span><span class="named-paragraph-number">28.5.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> now get ready for what we expect by default to be an ordinary word next</span>
@ -1007,8 +1022,8 @@ is stored just below <span class="extract"><span class="extract-syntax">lexer_hw
<span class="plain-syntax"> </span><span class="identifier-syntax">lxs_this_word_is_empty_so_far</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lxs_kind_of_word</span><span class="plain-syntax"> = </span><span class="constant-syntax">ORDINARY_KW</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP27">&#167;27</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_5_1" class="paragraph-anchor"></a><b>&#167;27.5.1. </b>Note that here we are recording either an ordinary word, a literal string
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP28">&#167;28</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP28_5_1" class="paragraph-anchor"></a><b>&#167;28.5.1. </b>Note that here we are recording either an ordinary word, a literal string
or a literal I6 insertion: comments are also literal, but are thrown away,
and do not come here.
</p>
@ -1018,7 +1033,7 @@ and do not come here.
<span class="definition-keyword">enum</span> <span class="constant-syntax">WORD_TOO_LONG_LEXERERROR</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">I6_TOO_LONG_LEXERERROR</span>
</pre>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue problem message and truncate if over maximum length for what it is</span><span class="named-paragraph-number">27.5.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue problem message and truncate if over maximum length for what it is</span><span class="named-paragraph-number">28.5.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1029,17 +1044,17 @@ and do not come here.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">len</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">max_len</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lexer_word</span><span class="plain-syntax">[</span><span class="identifier-syntax">max_len</span><span class="plain-syntax">] = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax"> truncate to its maximum length</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lxs_kind_of_word</span><span class="plain-syntax"> == </span><span class="constant-syntax">STRING_KW</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP30" class="function-link"><span class="function-syntax">Lexer::lexer_problem_handler</span></a><span class="plain-syntax">(</span><span class="constant-syntax">STRING_TOO_LONG_LEXERERROR</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">lexer_word</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP31" class="function-link"><span class="function-syntax">Lexer::lexer_problem_handler</span></a><span class="plain-syntax">(</span><span class="constant-syntax">STRING_TOO_LONG_LEXERERROR</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">lexer_word</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lxs_kind_of_word</span><span class="plain-syntax"> == </span><span class="constant-syntax">I6_INCLUSION_KW</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lexer_word</span><span class="plain-syntax">[100] = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax"> to avoid an absurdly long problem message</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP30" class="function-link"><span class="function-syntax">Lexer::lexer_problem_handler</span></a><span class="plain-syntax">(</span><span class="constant-syntax">I6_TOO_LONG_LEXERERROR</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">lexer_word</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP31" class="function-link"><span class="function-syntax">Lexer::lexer_problem_handler</span></a><span class="plain-syntax">(</span><span class="constant-syntax">I6_TOO_LONG_LEXERERROR</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">lexer_word</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP30" class="function-link"><span class="function-syntax">Lexer::lexer_problem_handler</span></a><span class="plain-syntax">(</span><span class="constant-syntax">WORD_TOO_LONG_LEXERERROR</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">lexer_word</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP31" class="function-link"><span class="function-syntax">Lexer::lexer_problem_handler</span></a><span class="plain-syntax">(</span><span class="constant-syntax">WORD_TOO_LONG_LEXERERROR</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">lexer_word</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP27_5">&#167;27.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_5_2" class="paragraph-anchor"></a><b>&#167;27.5.2. </b>We recorded the break for the word when it started (recall that, even if
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP28_5">&#167;28.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP28_5_2" class="paragraph-anchor"></a><b>&#167;28.5.2. </b>We recorded the break for the word when it started (recall that, even if
the current word is a literal, its first character was read outside literal
mode, so it started out in life as an ordinary word and therefore had its
break recorded). So now we need to set everything else about it, and to
@ -1059,7 +1074,7 @@ lexer was called. The lowering loop can therefore never overspill the
workspace.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Store everything about the word except its break, which we already know</span><span class="named-paragraph-number">27.5.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Store everything about the word except its break, which we already know</span><span class="named-paragraph-number">28.5.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1080,8 +1095,8 @@ workspace.
<span class="plain-syntax"> </span><span class="identifier-syntax">lexer_wordcount</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP13" class="function-link"><span class="function-syntax">Lexer::ensure_space_up_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">lexer_wordcount</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP27_5">&#167;27.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_6" class="paragraph-anchor"></a><b>&#167;27.6. Entering and leaving literal mode. </b>After a character has been stored, in ordinary mode, we see if it
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP28_5">&#167;28.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP28_6" class="paragraph-anchor"></a><b>&#167;28.6. Entering and leaving literal mode. </b>After a character has been stored, in ordinary mode, we see if it
provokes us into entering literal mode, by signifying the start of a
comment, string or passage of verbatim Inform 6.
</p>
@ -1109,7 +1124,7 @@ recording two words
throwing away the hyphen from the material of the current word.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Contemplate entering literal mode</span><span class="named-paragraph-number">27.6</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Contemplate entering literal mode</span><span class="named-paragraph-number">28.6</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1135,8 +1150,8 @@ throwing away the hyphen from the material of the current word.
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP27">&#167;27</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_7" class="paragraph-anchor"></a><b>&#167;27.7. </b>So literal mode is used for comments, strings and verbatim passages of
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP28">&#167;28</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP28_7" class="paragraph-anchor"></a><b>&#167;28.7. </b>So literal mode is used for comments, strings and verbatim passages of
Inform 6 code. We are in this mode when scanning only the middle of
the literal: after all, we scanned (and recorded) the start of the literal
in ordinary mode, before noticing that the character(s) marked the onset of
@ -1158,7 +1173,7 @@ literal we have just made. (Or, if it was a comment, discarding it.)
finished.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Contemplate leaving literal mode</span><span class="named-paragraph-number">27.7</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Contemplate leaving literal mode</span><span class="named-paragraph-number">28.7</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1188,8 +1203,8 @@ finished.
<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">lxs_literal_mode</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</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="comment-syntax"> trigger completion of this word</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP27">&#167;27</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_8" class="paragraph-anchor"></a><b>&#167;27.8. Breaking strings up at text substitutions. </b>When text contains text substitutions, these are ordinarily ignored by the
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP28">&#167;28</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP28_8" class="paragraph-anchor"></a><b>&#167;28.8. Breaking strings up at text substitutions. </b>When text contains text substitutions, these are ordinarily ignored by the
lexer, but in <span class="extract"><span class="extract-syntax">lexer_divide_strings_at_text_substitutions</span></span> mode, we need to
force strings to end and resume at the two ends of each substitution. For
instance:
@ -1216,20 +1231,20 @@ to recording the character, so to get rid of the <span class="extract"><span cla
<span class="extract"><span class="extract-syntax">c</span></span> to a space:
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Force string division at the start of a text substitution, if necessary</span><span class="named-paragraph-number">27.8</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Force string division at the start of a text substitution, if necessary</span><span class="named-paragraph-number">28.8</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">lexer_divide_strings_at_text_substitutions</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="constant-syntax">TEXT_SUBSTITUTION_BEGIN</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP27" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="constant-syntax">STRING_END</span><span class="plain-syntax">); </span><span class="comment-syntax"> feed </span><span class="extract"><span class="extract-syntax">"</span></span><span class="comment-syntax"> to close the old string</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP27" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">' '</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP27" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="constant-syntax">TEXT_SUBSTITUTION_SEPARATOR</span><span class="plain-syntax">); </span><span class="comment-syntax"> feed </span><span class="extract"><span class="extract-syntax">,</span></span><span class="comment-syntax"> to start new word</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP28" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="constant-syntax">STRING_END</span><span class="plain-syntax">); </span><span class="comment-syntax"> feed </span><span class="extract"><span class="extract-syntax">"</span></span><span class="comment-syntax"> to close the old string</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP28" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">' '</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP28" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="constant-syntax">TEXT_SUBSTITUTION_SEPARATOR</span><span class="plain-syntax">); </span><span class="comment-syntax"> feed </span><span class="extract"><span class="extract-syntax">,</span></span><span class="comment-syntax"> to start new word</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="comment-syntax"> the lexer now goes on to record a space, which will end the </span><span class="extract"><span class="extract-syntax">,</span></span><span class="comment-syntax"> word</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lxs_scanning_text_substitution</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="comment-syntax"> but remember that we must get back again</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP27">&#167;27</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_9" class="paragraph-anchor"></a><b>&#167;27.9. </b>Whereas we see to close squares after recording the character, so we have
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP28">&#167;28</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP28_9" class="paragraph-anchor"></a><b>&#167;28.9. </b>Whereas we see to close squares after recording the character, so we have
to erase it to get rid of the <span class="extract"><span class="extract-syntax">]</span></span>. Note that since this was read in ordinary
mode, it was automatically spaced (being punctuation), and that therefore
the feeder above has just sent the second of a sequence of three characters:
@ -1249,19 +1264,19 @@ open quotes again, we have put the lexer into literal mode: and so the
spurious space is never fed, and there is no problem.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Force string division at the end of a text substitution, if necessary</span><span class="named-paragraph-number">27.9</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Force string division at the end of a text substitution, if necessary</span><span class="named-paragraph-number">28.9</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">lexer_divide_strings_at_text_substitutions</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="constant-syntax">TEXT_SUBSTITUTION_END</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lxs_scanning_text_substitution</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> *(</span><span class="identifier-syntax">lexer_hwm</span><span class="plain-syntax">-1) = </span><span class="constant-syntax">TEXT_SUBSTITUTION_SEPARATOR</span><span class="plain-syntax">; </span><span class="comment-syntax"> overwrite recorded copy of </span><span class="extract"><span class="extract-syntax">]</span></span><span class="comment-syntax"> with </span><span class="extract"><span class="extract-syntax">,</span></span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP27" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">' '</span><span class="plain-syntax">); </span><span class="comment-syntax"> then feed a space to end the </span><span class="extract"><span class="extract-syntax">,</span></span><span class="comment-syntax"> word</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP27" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="constant-syntax">STRING_BEGIN</span><span class="plain-syntax">); </span><span class="comment-syntax"> then feed </span><span class="extract"><span class="extract-syntax">"</span></span><span class="comment-syntax"> to open a new string</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP28" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="character-syntax">' '</span><span class="plain-syntax">); </span><span class="comment-syntax"> then feed a space to end the </span><span class="extract"><span class="extract-syntax">,</span></span><span class="comment-syntax"> word</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP28" class="function-link"><span class="function-syntax">Lexer::feed_char_into_lexer</span></a><span class="plain-syntax">(</span><span class="constant-syntax">STRING_BEGIN</span><span class="plain-syntax">); </span><span class="comment-syntax"> then feed </span><span class="extract"><span class="extract-syntax">"</span></span><span class="comment-syntax"> to open a new string</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP27">&#167;27</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP28" class="paragraph-anchor"></a><b>&#167;28. </b>Finally, note that the breaking-up process may result in empty strings
<ul class="endnotetexts"><li>This code is used in <a href="3-lxr.html#SP28">&#167;28</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP29" class="paragraph-anchor"></a><b>&#167;29. </b>Finally, note that the breaking-up process may result in empty strings
where square brackets abut each other or the ends of the original string.
Thus
</p>
@ -1275,7 +1290,7 @@ This is not a bug: empty strings are legal. It's for higher-level code to
remove them if they aren't wanted.
</p>
<p class="commentary firstcommentary"><a id="SP29" class="paragraph-anchor"></a><b>&#167;29. Splicing. </b>Once in a while, we need to have a run of words in the lexer which
<p class="commentary firstcommentary"><a id="SP30" class="paragraph-anchor"></a><b>&#167;30. Splicing. </b>Once in a while, we need to have a run of words in the lexer which
all do occur in the source text, but not contiguously, so that they
cannot be represented by a pair <span class="extract"><span class="extract-syntax">(w1, w2)</span></span>. In that event we use the
following routine to splice duplicate references at the end of the word
@ -1286,7 +1301,7 @@ contains the same material as words 2, 3, 6, 7, 8.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Lexer::splice_words</span><button class="popup" onclick="togglePopup('usagePopup25')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup25">Usage of <span class="code-font"><span class="function-syntax">Lexer::splice_words</span></span>:<br/>Feeds - <a href="3-fds.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Lexer::splice_words</span><button class="popup" onclick="togglePopup('usagePopup26')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup26">Usage of <span class="code-font"><span class="function-syntax">Lexer::splice_words</span></span>:<br/>Feeds - <a href="3-fds.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><a href="3-wrd.html#SP7" class="function-link"><span class="function-syntax">Wordings::length</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP13" class="function-link"><span class="function-syntax">Lexer::ensure_space_up_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">lexer_wordcount</span><span class="plain-syntax"> + </span><span class="identifier-syntax">L</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">L</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
@ -1296,14 +1311,14 @@ contains the same material as words 2, 3, 6, 7, 8.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP30" class="paragraph-anchor"></a><b>&#167;30. Basic command-line error handler. </b>Some tools using this module will want to push simple error messages out to
<p class="commentary firstcommentary"><a id="SP31" class="paragraph-anchor"></a><b>&#167;31. Basic command-line error handler. </b>Some tools using this module will want to push simple error messages out to
the command line; others will want to translate them into elaborate problem
texts in HTML. So the client is allowed to define <span class="extract"><span class="extract-syntax">PROBLEM_WORDS_CALLBACK</span></span>
to some routine of her own, gazumping this one.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lexer::lexer_problem_handler</span><button class="popup" onclick="togglePopup('usagePopup26')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup26">Usage of <span class="code-font"><span class="function-syntax">Lexer::lexer_problem_handler</span></span>:<br/><a href="3-lxr.html#SP13">&#167;13</a>, <a href="3-lxr.html#SP25_3">&#167;25.3</a>, <a href="3-lxr.html#SP27_5_1">&#167;27.5.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">details</span><span class="plain-syntax">, </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">word</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lexer::lexer_problem_handler</span><button class="popup" onclick="togglePopup('usagePopup27')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup27">Usage of <span class="code-font"><span class="function-syntax">Lexer::lexer_problem_handler</span></span>:<br/><a href="3-lxr.html#SP13">&#167;13</a>, <a href="3-lxr.html#SP25_3">&#167;25.3</a>, <a href="3-lxr.html#SP28_5_1">&#167;28.5.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">details</span><span class="plain-syntax">, </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">word</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">PROBLEM_WORDS_CALLBACK</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PROBLEM_WORDS_CALLBACK</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="identifier-syntax">details</span><span class="plain-syntax">, </span><span class="identifier-syntax">word</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
@ -1338,7 +1353,7 @@ to some routine of her own, gazumping this one.
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP31" class="paragraph-anchor"></a><b>&#167;31. Logging absolutely everything. </b>This is not to be done lightly: the output can be enormous.
<p class="commentary firstcommentary"><a id="SP32" class="paragraph-anchor"></a><b>&#167;32. Logging absolutely everything. </b>This is not to be done lightly: the output can be enormous.
</p>
<pre class="displayed-code all-displayed-code code-font">

View file

@ -73,6 +73,7 @@ in a <span class="extract"><span class="extract-syntax">source_file</span></span
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">words_of_quoted_text</span><span class="plain-syntax">; </span><span class="comment-syntax"> word count for text in double-quotes</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">FILE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">handle</span><span class="plain-syntax">; </span><span class="comment-syntax"> file handle while open</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">general_pointer</span><span class="plain-syntax"> </span><span class="identifier-syntax">your_ref</span><span class="plain-syntax">; </span><span class="comment-syntax"> for the client to attach some meaning</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">torn_off_documentation</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">source_file</span><span class="plain-syntax">;</span>
</pre>
@ -89,6 +90,9 @@ as if spaces in most contexts, but not when parsing formatted tables, for
instance, so they are not similarly converted.
</p>
<p class="commentary">We also want to look out for the tear-off documentation line, if there is one.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">source_file</span><span class="plain-syntax"> *</span><span class="function-syntax">TextFromFiles::feed_open_file_into_lexer</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">TextFromFiles::feed_open_file_into_lexer</span></span>:<br/><a href="3-tff.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="reserved-syntax">FILE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">handle</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">leaf</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">documentation_only</span><span class="plain-syntax">, </span><span class="identifier-syntax">general_pointer</span><span class="plain-syntax"> </span><span class="identifier-syntax">ref</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>
@ -98,8 +102,9 @@ instance, so they are not similarly converted.
<span class="plain-syntax"> </span><span class="identifier-syntax">sf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">your_ref</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ref</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">F</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">handle</span><span class="plain-syntax"> = </span><span class="identifier-syntax">handle</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">torn_off_documentation</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">source_location</span><span class="plain-syntax"> </span><span class="identifier-syntax">top_of_file</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">cr</span><span class="plain-syntax">, </span><span class="identifier-syntax">last_cr</span><span class="plain-syntax">, </span><span class="identifier-syntax">next_cr</span><span class="plain-syntax">, </span><span class="identifier-syntax">read_cr</span><span class="plain-syntax">, </span><span class="identifier-syntax">newline_char</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">cr</span><span class="plain-syntax">, </span><span class="identifier-syntax">last_cr</span><span class="plain-syntax">, </span><span class="identifier-syntax">next_cr</span><span class="plain-syntax">, </span><span class="identifier-syntax">read_cr</span><span class="plain-syntax">, </span><span class="identifier-syntax">newline_char</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">torn_off</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">unicode_file_buffer</span><span class="plain-syntax"> </span><span class="identifier-syntax">ufb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TextFiles::create_filtered_ufb</span><span class="plain-syntax">(</span><span class="identifier-syntax">mode</span><span class="plain-syntax">);</span>
@ -131,7 +136,12 @@ instance, so they are not similarly converted.
<span class="plain-syntax"> </span><span class="identifier-syntax">newline_char</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">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP26" class="function-link"><span class="function-syntax">Lexer::feed_triplet</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">last_cr</span><span class="plain-syntax">, </span><span class="identifier-syntax">cr</span><span class="plain-syntax">, </span><span class="identifier-syntax">next_cr</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">torn_off</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">sf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">torn_off_documentation</span><span class="plain-syntax">, </span><span class="identifier-syntax">cr</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP27" class="function-link"><span class="function-syntax">Lexer::feed_triplet</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">last_cr</span><span class="plain-syntax">, </span><span class="identifier-syntax">cr</span><span class="plain-syntax">, </span><span class="identifier-syntax">next_cr</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">torn_off</span><span class="plain-syntax"> = </span><a href="3-lxr.html#SP26" class="function-link"><span class="function-syntax">Lexer::detect_tear_off</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">text_read</span><span class="plain-syntax"> = </span><a href="3-lxr.html#SP25" class="function-link"><span class="function-syntax">Lexer::feed_ends</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">leaf</span><span class="plain-syntax">);</span>
@ -206,6 +216,10 @@ the following routine, which combines them into one.
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">TextFromFiles::last_lexed_word</span><span class="plain-syntax">(</span><span class="reserved-syntax">source_file</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sf</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-wrd.html#SP7" class="function-link"><span class="function-syntax">Wordings::last_wn</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">sf</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">text_read</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="function-syntax">TextFromFiles::torn_off_documentation</span><span class="plain-syntax">(</span><span class="reserved-syntax">source_file</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sf</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">sf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">torn_off_documentation</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>Finally, we translate between the tiresomely many representations of
files we seem to be stuck with. The method used by <span class="extract"><span class="extract-syntax">TextFromFiles::filename_to_source_file</span></span>

View file

@ -108,7 +108,7 @@ if the wording is empty.
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. Construction. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Wordings::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Wordings::new</span></span>:<br/><a href="3-wrd.html#SP9">&#167;9</a><br/>Lexer - <a href="3-lxr.html#SP25">&#167;25</a>, <a href="3-lxr.html#SP25_3">&#167;25.3</a>, <a href="3-lxr.html#SP29">&#167;29</a><br/>Feeds - <a href="3-fds.html#SP2">&#167;2</a><br/>Loading Preform - <a href="4-lp.html#SP7_3">&#167;7.3</a><br/>Preform - <a href="4-prf.html#SP1_3_2_1_4_4">&#167;1.3.2.1.4.4</a>, <a href="4-prf.html#SP1_3_2_1_4_4_2_3_1_5">&#167;1.3.2.1.4.4.2.3.1.5</a>, <a href="4-prf.html#SP1_3_2_1_4_4_2_3_1_3_1">&#167;1.3.2.1.4.4.2.3.1.3.1</a>, <a href="4-prf.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">B</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Wordings::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Wordings::new</span></span>:<br/><a href="3-wrd.html#SP9">&#167;9</a><br/>Lexer - <a href="3-lxr.html#SP25">&#167;25</a>, <a href="3-lxr.html#SP25_3">&#167;25.3</a>, <a href="3-lxr.html#SP30">&#167;30</a><br/>Feeds - <a href="3-fds.html#SP2">&#167;2</a><br/>Loading Preform - <a href="4-lp.html#SP7_3">&#167;7.3</a><br/>Preform - <a href="4-prf.html#SP1_3_2_1_4_4">&#167;1.3.2.1.4.4</a>, <a href="4-prf.html#SP1_3_2_1_4_4_2_3_1_5">&#167;1.3.2.1.4.4.2.3.1.5</a>, <a href="4-prf.html#SP1_3_2_1_4_4_2_3_1_3_1">&#167;1.3.2.1.4.4.2.3.1.3.1</a>, <a href="4-prf.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">B</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="reserved-syntax">wording</span><span class="plain-syntax">) { </span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">B</span><span class="plain-syntax"> };</span>
<span class="plain-syntax">}</span>
@ -136,7 +136,7 @@ by moving <span class="extract"><span class="extract-syntax">A</span></span> pas
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. Reading. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Wordings::length</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">Wordings::length</span></span>:<br/><a href="3-wrd.html#SP8">&#167;8</a>, <a href="3-wrd.html#SP13">&#167;13</a>, <a href="3-wrd.html#SP20">&#167;20</a><br/>Word Assemblages - <a href="2-wa.html#SP3">&#167;3</a>, <a href="2-wa.html#SP9">&#167;9</a>, <a href="2-wa.html#SP10">&#167;10</a><br/>Lexer - <a href="3-lxr.html#SP29">&#167;29</a><br/>Loading Preform - <a href="4-lp.html#SP15_2">&#167;15.2</a><br/>Nonterminal Incidences - <a href="4-ni.html#SP8">&#167;8</a><br/>Preform - <a href="4-prf.html#SP1">&#167;1</a><br/>Instrumentation - <a href="4-ins.html#SP6">&#167;6</a>, <a href="4-ins.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Wordings::length</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">Wordings::length</span></span>:<br/><a href="3-wrd.html#SP8">&#167;8</a>, <a href="3-wrd.html#SP13">&#167;13</a>, <a href="3-wrd.html#SP20">&#167;20</a><br/>Word Assemblages - <a href="2-wa.html#SP3">&#167;3</a>, <a href="2-wa.html#SP9">&#167;9</a>, <a href="2-wa.html#SP10">&#167;10</a><br/>Lexer - <a href="3-lxr.html#SP30">&#167;30</a><br/>Loading Preform - <a href="4-lp.html#SP15_2">&#167;15.2</a><br/>Nonterminal Incidences - <a href="4-ni.html#SP8">&#167;8</a><br/>Preform - <a href="4-prf.html#SP1">&#167;1</a><br/>Instrumentation - <a href="4-ins.html#SP6">&#167;6</a>, <a href="4-ins.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-wrd.html#SP11" class="function-link"><span class="function-syntax">Wordings::empty</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">word_B</span><span class="plain-syntax"> - </span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="element-syntax">word_A</span><span class="plain-syntax"> + </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -152,7 +152,7 @@ by moving <span class="extract"><span class="extract-syntax">A</span></span> pas
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Wordings::first_wn</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Wordings::first_wn</span></span>:<br/><a href="3-wrd.html#SP17">&#167;17</a>, <a href="3-wrd.html#SP20">&#167;20</a>, <a href="3-wrd.html#SP21_3">&#167;21.3</a>, <a href="3-wrd.html#SP21_4">&#167;21.4</a><br/>Vocabulary - <a href="2-vcb.html#SP16">&#167;16</a><br/>Word Assemblages - <a href="2-wa.html#SP8">&#167;8</a>, <a href="2-wa.html#SP9">&#167;9</a>, <a href="2-wa.html#SP10">&#167;10</a><br/>Lexer - <a href="3-lxr.html#SP25">&#167;25</a>, <a href="3-lxr.html#SP29">&#167;29</a><br/>Loading Preform - <a href="4-lp.html#SP15_2">&#167;15.2</a><br/>Nonterminal Incidences - <a href="4-ni.html#SP5">&#167;5</a>, <a href="4-ni.html#SP8_1">&#167;8.1</a>, <a href="4-ni.html#SP8_2">&#167;8.2</a>, <a href="4-ni.html#SP8_3">&#167;8.3</a>, <a href="4-ni.html#SP8_4">&#167;8.4</a>, <a href="4-ni.html#SP8_5">&#167;8.5</a><br/>Preform - <a href="4-prf.html#SP1_3_1">&#167;1.3.1</a>, <a href="4-prf.html#SP1_3_2_1_4_4_1">&#167;1.3.2.1.4.4.1</a>, <a href="4-prf.html#SP1_3_2_1_4_4_2_1">&#167;1.3.2.1.4.4.2.1</a>, <a href="4-prf.html#SP1_3_2_1_4_4_2_3">&#167;1.3.2.1.4.4.2.3</a>, <a href="4-prf.html#SP1_3_2_1_4_4_2_3_1_3_1">&#167;1.3.2.1.4.4.2.3.1.3.1</a><br/>Basic Nonterminals - <a href="4-bn.html#SP1">&#167;1</a>, <a href="4-bn.html#SP2">&#167;2</a>, <a href="4-bn.html#SP3">&#167;3</a>, <a href="4-bn.html#SP6">&#167;6</a>, <a href="4-bn.html#SP7">&#167;7</a>, <a href="4-bn.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Wordings::first_wn</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Wordings::first_wn</span></span>:<br/><a href="3-wrd.html#SP17">&#167;17</a>, <a href="3-wrd.html#SP20">&#167;20</a>, <a href="3-wrd.html#SP21_3">&#167;21.3</a>, <a href="3-wrd.html#SP21_4">&#167;21.4</a><br/>Vocabulary - <a href="2-vcb.html#SP16">&#167;16</a><br/>Word Assemblages - <a href="2-wa.html#SP8">&#167;8</a>, <a href="2-wa.html#SP9">&#167;9</a>, <a href="2-wa.html#SP10">&#167;10</a><br/>Lexer - <a href="3-lxr.html#SP25">&#167;25</a>, <a href="3-lxr.html#SP30">&#167;30</a><br/>Loading Preform - <a href="4-lp.html#SP15_2">&#167;15.2</a><br/>Nonterminal Incidences - <a href="4-ni.html#SP5">&#167;5</a>, <a href="4-ni.html#SP8_1">&#167;8.1</a>, <a href="4-ni.html#SP8_2">&#167;8.2</a>, <a href="4-ni.html#SP8_3">&#167;8.3</a>, <a href="4-ni.html#SP8_4">&#167;8.4</a>, <a href="4-ni.html#SP8_5">&#167;8.5</a><br/>Preform - <a href="4-prf.html#SP1_3_1">&#167;1.3.1</a>, <a href="4-prf.html#SP1_3_2_1_4_4_1">&#167;1.3.2.1.4.4.1</a>, <a href="4-prf.html#SP1_3_2_1_4_4_2_1">&#167;1.3.2.1.4.4.2.1</a>, <a href="4-prf.html#SP1_3_2_1_4_4_2_3">&#167;1.3.2.1.4.4.2.3</a>, <a href="4-prf.html#SP1_3_2_1_4_4_2_3_1_3_1">&#167;1.3.2.1.4.4.2.3.1.3.1</a><br/>Basic Nonterminals - <a href="4-bn.html#SP1">&#167;1</a>, <a href="4-bn.html#SP2">&#167;2</a>, <a href="4-bn.html#SP3">&#167;3</a>, <a href="4-bn.html#SP6">&#167;6</a>, <a href="4-bn.html#SP7">&#167;7</a>, <a href="4-bn.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</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">W</span><span class="plain-syntax">.</span><span class="element-syntax">word_A</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>

View file

@ -115,7 +115,7 @@ Preform definitions in its own way; they will otherwise by default be standard
command-line error message written to <span class="extract"><span class="extract-syntax">STDERR</span></span>.
</li><li>&#9679; <span class="extract"><span class="extract-syntax">PROBLEM_WORDS_CALLBACK</span></span> is called when a lexical error is found, and can
prevent this from being issued to the terminal as an error message: see
<a href="3-lxr.html#SP30" class="internal">Lexer::lexer_problem_handler</a>.
<a href="3-lxr.html#SP31" class="internal">Lexer::lexer_problem_handler</a>.
</li><li>&#9679; <span class="extract"><span class="extract-syntax">VOCABULARY_MEANING_INITIALISER_WORDS_CALLBACK</span></span> is called to attach a
meaning object to a single <a href="2-vcb.html#SP1" class="internal">vocabulary_entry</a>. In this module, meanings are
not our concern: all we provide is the opportunity for our parent tool to

View file

@ -131,7 +131,7 @@ there are exotica such as <span class="extract"><span class="extract-syntax">COL
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>Lexical errors occur if words are too long, or quoted text continues without
a close quote right to the end of a file, and so on. These are sent to the
function <a href="3-lxr.html#SP30" class="internal">Lexer::lexer_problem_handler</a>, but can be intercepted by the
function <a href="3-lxr.html#SP31" class="internal">Lexer::lexer_problem_handler</a>, but can be intercepted by the
user (see <a href="P-htitm.html" class="internal">How To Include This Module</a>).
</p>
@ -173,7 +173,7 @@ of the <a href="index.html" class="internal">words</a> module has two options:
<ul class="items"><li>&#9679; Create a <a href="2-wa.html#SP1" class="internal">word_assemblage</a> object. This can represent any discontiguous
list of word numbers: thus, the text "lamb went everywhere" could be a WA
of numbers (21, 26, 23) in our example above.
</li><li>&#9679; Use <a href="3-lxr.html#SP29" class="internal">Lexer::splice_words</a> to create duplicate snippets of text in the
</li><li>&#9679; Use <a href="3-lxr.html#SP30" class="internal">Lexer::splice_words</a> to create duplicate snippets of text in the
word stream, with new numbers. For example, call this on "lamb", then "went",
then "everywhere"; the three new word numbers will then be contiguous, and
can be represented by a <a href="3-wrd.html#SP1" class="internal">wording</a>:

View file

@ -111,7 +111,7 @@ error in this case.
@<Perform an extension installation@> =
Supervisor::go_operational();
InbuildReport::install(to_install, confirmed, path_to_inbuild);
ExtensionInstaller::install(to_install, confirmed, path_to_inbuild);
@ We make the function call |Supervisor::go_operational| to signal to |inbuild|
that we want to start work now.
@ -521,7 +521,7 @@ void Main::option(int id, int val, text_stream *arg, void *state) {
break;
case REPAIR_CLSW: repair_mode = val; break;
case INSTALL_CLSW: to_install = Main::file_or_path_to_copy(arg, TRUE); break;
case RESULTS_CLSW: InbuildReport::set_filename(Filenames::from_text(arg)); break;
case RESULTS_CLSW: ExtensionInstaller::set_filename(Filenames::from_text(arg)); break;
case CONFIRMED_CLSW: confirmed = val; break;
case VERBOSE_CLSW: Supervisor::set_verbosity(1); break;
case VERBOSITY_CLSW: Supervisor::set_verbosity(val); break;

View file

@ -1,230 +1,82 @@
[DocumentationCompiler::] Documentation Compiler.
To compile documentation from an extension into a useful internal format
for rendering out.
To compile documentation from the textual syntax in an extension into a tree.
@
@ We will actually wrap the result in the following structure, but
it's really not much more than the tree produced by //Documentation Tree//:
=
typedef struct compiled_documentation {
struct text_stream *title;
struct text_stream *original;
struct inform_extension *associated_extension;
struct heterogeneous_tree *content;
struct heterogeneous_tree *tree;
int total_headings[3];
int total_examples;
int empty;
CLASS_DEFINITION
} compiled_documentation;
tree_type *cdoc_tree_TT = NULL;
tree_node_type *heading_TNT = NULL, *example_TNT = NULL,
*passage_TNT = NULL, *paragraph_TNT = NULL, *code_sample_TNT = NULL, *code_line_TNT = NULL;
typedef struct cdoc_heading {
struct text_stream *count;
struct text_stream *name;
int level; /* 0 = root, 1 = chapter, 2 = section */
int ID;
CLASS_DEFINITION
} cdoc_heading;
tree_node *DocumentationCompiler::new_heading(heterogeneous_tree *tree,
text_stream *title, int level, int ID, int cc, int sc) {
cdoc_heading *H = CREATE(cdoc_heading);
H->count = Str::new();
if (cc > 0) WRITE_TO(H->count, "%d", cc);
if ((cc > 0) && (sc > 0)) WRITE_TO(H->count, ".");
if (sc > 0) WRITE_TO(H->count, "%d", sc);
H->name = Str::duplicate(title);
H->level = level;
H->ID = ID;
return Trees::new_node(tree, heading_TNT, STORE_POINTER_cdoc_heading(H));
compiled_documentation *DocumentationCompiler::new_wrapper(text_stream *source) {
compiled_documentation *cd = CREATE(compiled_documentation);
cd->title = Str::new();
cd->original = Str::duplicate(source);
cd->associated_extension = NULL;
cd->tree = DocumentationTree::new();
cd->total_examples = 0;
cd->total_headings[0] = 1;
cd->total_headings[1] = 0;
cd->total_headings[2] = 0;
cd->empty = FALSE;
return cd;
}
typedef struct cdoc_example {
struct text_stream *name;
int star_count;
int number;
char letter;
CLASS_DEFINITION
} cdoc_example;
tree_node *DocumentationCompiler::new_example(heterogeneous_tree *tree,
text_stream *title, int star_count, int ecount) {
cdoc_example *E = CREATE(cdoc_example);
E->name = Str::duplicate(title);
E->star_count = star_count;
E->number = ecount;
E->letter = 'A' + (char) ecount - 1;
return Trees::new_node(tree, example_TNT, STORE_POINTER_cdoc_example(E));
}
typedef struct cdoc_passage {
CLASS_DEFINITION
} cdoc_passage;
tree_node *DocumentationCompiler::new_passage(heterogeneous_tree *tree) {
cdoc_passage *P = CREATE(cdoc_passage);
return Trees::new_node(tree, passage_TNT, STORE_POINTER_cdoc_passage(P));
}
typedef struct cdoc_paragraph {
struct text_stream *content;
CLASS_DEFINITION
} cdoc_paragraph;
tree_node *DocumentationCompiler::new_paragraph(heterogeneous_tree *tree,
text_stream *content) {
cdoc_paragraph *P = CREATE(cdoc_paragraph);
P->content = Str::duplicate(content);
return Trees::new_node(tree, paragraph_TNT, STORE_POINTER_cdoc_paragraph(P));
}
typedef struct cdoc_code_sample {
CLASS_DEFINITION
} cdoc_code_sample;
tree_node *DocumentationCompiler::new_code_sample(heterogeneous_tree *tree) {
cdoc_code_sample *C = CREATE(cdoc_code_sample);
return Trees::new_node(tree, code_sample_TNT, STORE_POINTER_cdoc_code_sample(C));
}
typedef struct cdoc_code_line {
struct text_stream *content;
int indentation;
CLASS_DEFINITION
} cdoc_code_line;
tree_node *DocumentationCompiler::new_code_line(heterogeneous_tree *tree,
text_stream *content, int indentation) {
cdoc_code_line *C = CREATE(cdoc_code_line);
C->content = Str::duplicate(content);
C->indentation = indentation;
return Trees::new_node(tree, code_line_TNT, STORE_POINTER_cdoc_code_line(C));
}
heterogeneous_tree *DocumentationCompiler::new_tree(void) {
if (cdoc_tree_TT == NULL) {
cdoc_tree_TT = Trees::new_type(I"documentation tree", &DocumentationCompiler::verify_root);
heading_TNT = Trees::new_node_type(I"heading", cdoc_heading_CLASS, &DocumentationCompiler::heading_verifier);
example_TNT = Trees::new_node_type(I"example", cdoc_example_CLASS, &DocumentationCompiler::example_verifier);
passage_TNT = Trees::new_node_type(I"passage", cdoc_passage_CLASS, &DocumentationCompiler::passage_verifier);
paragraph_TNT = Trees::new_node_type(I"paragraph", cdoc_paragraph_CLASS, &DocumentationCompiler::paragraph_verifier);
code_sample_TNT = Trees::new_node_type(I"code sample", cdoc_code_sample_CLASS, &DocumentationCompiler::code_sample_verifier);
code_line_TNT = Trees::new_node_type(I"line", cdoc_code_line_CLASS, &DocumentationCompiler::code_line_verifier);
}
heterogeneous_tree *tree = Trees::new(cdoc_tree_TT);
Trees::make_root(tree, DocumentationCompiler::new_heading(tree, I"(root)", 0, 0, 0, 0));
return tree;
}
int DocumentationCompiler::verify_root(tree_node *N) {
if ((N == NULL) || (N->type != heading_TNT) || (N->next))
return FALSE;
return TRUE;
}
int DocumentationCompiler::heading_verifier(tree_node *N) {
for (tree_node *C = N->child; C; C = C->next) {
if ((C->type != heading_TNT) && (C->type != example_TNT) && (C->type != passage_TNT))
return FALSE;
if ((C->type == passage_TNT) && (C->next)) return FALSE;
}
return TRUE;
}
int DocumentationCompiler::example_verifier(tree_node *N) {
if ((N->child == NULL) || (N->child->type != passage_TNT) || (N->child->next))
return FALSE;
return TRUE;
}
int DocumentationCompiler::passage_verifier(tree_node *N) {
for (tree_node *C = N->child; C; C = C->next)
if ((C->type != paragraph_TNT) && (C->type != code_sample_TNT))
return FALSE;
return TRUE;
}
int DocumentationCompiler::paragraph_verifier(tree_node *N) {
if (N->child) return FALSE; /* This must be a leaf node */
return TRUE;
}
int DocumentationCompiler::code_sample_verifier(tree_node *N) {
for (tree_node *C = N->child; C; C = C->next)
if (C->type != code_line_TNT)
return FALSE;
if (N->child == NULL) return FALSE;
return TRUE;
}
int DocumentationCompiler::code_line_verifier(tree_node *N) {
if (N->child) return FALSE; /* This must be a leaf node */
return TRUE;
}
@ =
void DocumentationCompiler::show_tree(text_stream *OUT, heterogeneous_tree *T) {
WRITE("%S\n", T->type->name);
WRITE("--------\n");
INDENT;
Trees::traverse_from(T->root, &DocumentationCompiler::visit, (void *) DL, 0);
OUTDENT;
WRITE("--------\n");
}
int DocumentationCompiler::visit(tree_node *N, void *state, int L) {
text_stream *OUT = (text_stream *) state;
for (int i=0; i<L; i++) WRITE(" ");
if (N->type == heading_TNT) {
cdoc_heading *H = RETRIEVE_POINTER_cdoc_heading(N->content);
WRITE("Heading H%d level %d: '%S'\n", H->ID, H->level, H->name);
} else if (N->type == example_TNT) {
cdoc_example *E = RETRIEVE_POINTER_cdoc_example(N->content);
WRITE("Example: '%S' (%d star(s))\n", E->name, E->star_count);
} else if (N->type == passage_TNT) {
WRITE("Passage\n");
} else if (N->type == paragraph_TNT) {
cdoc_paragraph *E = RETRIEVE_POINTER_cdoc_paragraph(N->content);
WRITE("Paragraph: %d chars\n", Str::len(E->content));
for (int i=0; i<L+1; i++) { INDENT; }
WRITE("%S\n", E->content);
for (int i=0; i<L+1; i++) { OUTDENT; }
} else if (N->type == code_sample_TNT) {
WRITE("Code sample\n");
} else if (N->type == code_line_TNT) {
cdoc_code_line *E = RETRIEVE_POINTER_cdoc_code_line(N->content);
WRITE("Code line: ");
for (int i=0; i<E->indentation; i++) WRITE(" ");
WRITE("%S\n", E->content);
} else WRITE("Unknown node\n");
return TRUE;
}
@
@ Off we go, then:
=
compiled_documentation *DocumentationCompiler::compile(text_stream *source,
inform_extension *associated_extension) {
if (Str::len(source) == 0) return NULL;
compiled_documentation *cd = CREATE(compiled_documentation);
cd->original = Str::duplicate(source);
cd->associated_extension = associated_extension;
cd->content = DocumentationCompiler::new_tree();
tree_node *current_headings[3], *current_holder = NULL,
*current_passage = cd->content->root, *current_paragraph = NULL, *current_code = NULL;
current_headings[0] = cd->content->root;
current_headings[1] = NULL;
current_headings[2] = NULL;
int pending_code_sample_blanks = 0, heading_ID = 1, ccount = 0, scount = 0, ecount = 0;
@<Parse the source linewise@>;
cd->empty = FALSE;
if (Str::is_whitespace(source)) cd->empty = TRUE;
SVEXPLAIN(1, "(compiling documentation: %d chars)\n", Str::len(source));
SVEXPLAIN(3, "(from source...)\n%S\n(...end of source)\n", source);
DocumentationCompiler::show_tree(DL, cd->content);
compiled_documentation *cd = DocumentationCompiler::new_wrapper(source);
cd->associated_extension = associated_extension;
if (cd->associated_extension)
WRITE_TO(cd->title, "%X", cd->associated_extension->as_copy->edition->work);
if (Str::is_whitespace(source)) cd->empty = TRUE;
else @<Parse the source@>;
if (cd->empty) {
SVEXPLAIN(1, "(resulting tree is empty)\n");
} else {
SVEXPLAIN(1, "(resulting tree has %d chapter(s), %d section(s) and %d example(s))\n",
cd->total_headings[1], cd->total_headings[2], cd->total_examples);
}
return cd;
}
@ The source material is line-based, with semantic content sometimes spreading
across multiple lines, so we'll need to keep track of some state as we read
one line at a time:
@<Parse the source@> =
int chapter_number = 0, section_number = 0;
tree_node *current_headings[4]; /* Most recent headings of levels 0, 1, 2 */
current_headings[0] = cd->tree->root; /* This will never change */
current_headings[1] = NULL; /* Latest chapter, if any */
current_headings[2] = NULL; /* Latest section in most recent thing of lower level */
current_headings[3] = NULL; /* Latest example in most recent thing of lower level */
tree_node *current_passage = NULL, /* passage being assembled, if any */
*current_paragraph = NULL, /* paragraph being assembled, if any */
*current_code = NULL; /* code sample being assembled, if any */
int pending_code_sample_blanks = 0, code_is_tabular = FALSE; /* used only when assembling code samples */
@<Parse the source linewise@>;
@ Leading space on a line is removed but not ignored: it is converted into an
indentation level, measured as a tab count, using the exchange rate 4 spaces
to 1 tab.
@<Parse the source linewise@> =
TEMPORARY_TEXT(line)
int indentation = 0, space_count = 0;
@ -243,9 +95,24 @@ DocumentationCompiler::show_tree(DL, cd->content);
}
}
if (Str::len(line) > 0) @<Line read@>;
@<Complete passage@>;
@<Complete passage if in one@>;
DISCARD_TEXT(line)
@ Trailing space is ignored and removed.
Lines which are unindented and take the following shapes are headings:
= (text)
Chapter: Survey and Prospecting
Section: Black Gold
Example: *** Gelignite Anderson - A Tale of the Texas Oilmen
=
where in each case the colon can equally be a hyphen, and with optional
space either side.
Otherwise, lines are divided into blanks, which always end paragraphs but
may either end or continue code samples; unindented lines, which are always
part of paragraphs; or indented ones, which are always part of code samples.
@<Line read@> =
Str::trim_white_space(line);
if (Str::len(line) == 0) {
@ -253,33 +120,15 @@ DocumentationCompiler::show_tree(DL, cd->content);
if (current_code) @<Insert line break in code@>;
} else if (indentation == 0) {
match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, line, L"Section *: *(%c+?)")) {
scount++;
tree_node *s_node = DocumentationCompiler::new_heading(cd->content, mr.exp[0], 2, heading_ID++, ccount, scount);
if (current_headings[1] == NULL) LOG("*** No chapter for section '%S'***\n", mr.exp[0]);
Trees::make_child(s_node, current_headings[1]);
current_headings[2] = s_node;
@<Complete passage@>;
current_holder = s_node;
} else if (Regexp::match(&mr, line, L"Chapter *: *(%c+?)")) {
ccount++;
scount = 0;
tree_node *c_node = DocumentationCompiler::new_heading(cd->content, mr.exp[0], 1, heading_ID++, ccount, scount);
Trees::make_child(c_node, current_headings[0]);
current_headings[1] = c_node;
current_headings[2] = NULL;
@<Complete passage@>;
current_holder = c_node;
} else if (Regexp::match(&mr, line, L"Example *: *(%**) *(%c+?)")) {
ecount++;
tree_node *e_node = DocumentationCompiler::new_example(cd->content, mr.exp[1], Str::len(mr.exp[0]), ecount);
for (int j=2; j>=0; j--)
if (current_headings[j]) {
Trees::make_child(e_node, current_headings[j]);
break;
}
current_holder = e_node;
@<Complete passage@>;
if ((Regexp::match(&mr, line, L"Section *: *(%c+?)")) ||
(Regexp::match(&mr, line, L"Section *- *(%c+?)"))) {
@<Insert a section heading@>;
} else if ((Regexp::match(&mr, line, L"Chapter *: *(%c+?)")) ||
(Regexp::match(&mr, line, L"Chapter *- *(%c+?)"))) {
@<Insert a chapter heading@>;
} else if ((Regexp::match(&mr, line, L"Example *: *(%**) *(%c+?)")) ||
(Regexp::match(&mr, line, L"Example *- *(%**) *(%c+?)"))) {
@<Insert an example heading@>;
} else {
if (current_paragraph == NULL) @<Begin paragraph@>;
@<Insert space in paragraph@>;
@ -291,25 +140,69 @@ DocumentationCompiler::show_tree(DL, cd->content);
@<Insert line in code sample@>;
}
@<Begin passage@> =
@<Insert a chapter heading@> =
@<Complete passage if in one@>;
chapter_number++;
section_number = 0;
int level = 1, id = cd->total_headings[0] + cd->total_headings[1] + cd->total_headings[2];
cd->total_headings[1]++;
tree_node *new_node = DocumentationTree::new_heading(cd->tree, mr.exp[0], level,
id, chapter_number, section_number);
@<Place this new structural node in the tree@>;
@<Insert a section heading@> =
@<Complete passage if in one@>;
section_number++;
int level = 2, id = cd->total_headings[0] + cd->total_headings[1] + cd->total_headings[2];
cd->total_headings[2]++;
tree_node *new_node = DocumentationTree::new_heading(cd->tree, mr.exp[0], level,
id, chapter_number, section_number);
@<Place this new structural node in the tree@>;
@<Insert an example heading@> =
@<Complete passage if in one@>;
int level = 3;
tree_node *new_node = DocumentationTree::new_example(cd->tree, mr.exp[1],
Str::len(mr.exp[0]), ++(cd->total_examples));
@<Place this new structural node in the tree@>;
@<Place this new structural node in the tree@> =
for (int j=level-1; j>=0; j--)
if (current_headings[j]) {
Trees::make_child(new_node, current_headings[j]);
break;
}
current_headings[level] = new_node;
for (int j=level+1; j<4; j++) current_headings[j] = NULL;
@<Begin passage if not already in one@> =
if (current_passage == NULL) {
current_passage = DocumentationCompiler::new_passage(cd->content);
Trees::make_child(current_passage, current_holder);
current_passage = DocumentationTree::new_passage(cd->tree);
for (int j=3; j>=0; j--)
if (current_headings[j]) {
Trees::make_child(current_passage, current_headings[j]);
break;
}
current_paragraph = NULL;
}
@<Complete passage@> =
current_passage = NULL;
@<Complete paragraph or code@>;
@<Complete passage if in one@> =
if (current_passage) {
@<Complete paragraph or code@>;
current_passage = NULL;
}
@<Complete paragraph or code@> =
if (current_paragraph) @<Complete paragraph@>
if (current_code) @<Complete code@>
@ Line breaks are treated as spaces in the content of a paragraph, so that
|P->content| here can be a long text but one which contains no line breaks.
@<Begin paragraph@> =
@<Complete paragraph or code@>;
@<Begin passage@>;
current_paragraph = DocumentationCompiler::new_paragraph(cd->content, NULL);
@<Begin passage if not already in one@>;
current_paragraph = DocumentationTree::new_paragraph(cd->tree, NULL);
Trees::make_child(current_paragraph, current_passage);
@<Insert space in paragraph@> =
@ -325,166 +218,46 @@ DocumentationCompiler::show_tree(DL, cd->content);
current_paragraph = NULL;
}
@ Line breaks are more significant in code samples, of course. Blank lines
at the end of a code sample are stripped out; and they cannot appear at the start
of a code sample either, since a non-blank indented line is needed to trigger one.
@<Begin code@> =
@<Complete paragraph or code@>;
@<Begin passage@>;
current_code = DocumentationCompiler::new_code_sample(cd->content);
@<Begin passage if not already in one@>;
int paste_me = FALSE;
if ((Str::get_at(line, 0) == '*') &&
(Str::get_at(line, 1) == ':')) {
Str::delete_first_character(line);
Str::delete_first_character(line);
Str::trim_white_space(line);
paste_me = TRUE;
}
current_code = DocumentationTree::new_code_sample(cd->tree, paste_me);
Trees::make_child(current_code, current_passage);
pending_code_sample_blanks = 0;
code_is_tabular = FALSE;
@<Insert line break in code@> =
if (current_code->child) pending_code_sample_blanks++;
if (current_code->child) {
pending_code_sample_blanks++;
code_is_tabular = FALSE;
}
@<Insert line in code sample@> =
for (int i=0; i<pending_code_sample_blanks; i++)
Trees::make_child(DocumentationCompiler::new_code_line(cd->content, NULL, 0), current_code);
Trees::make_child(DocumentationTree::new_code_line(cd->tree, NULL, 0, FALSE), current_code);
pending_code_sample_blanks = 0;
Trees::make_child(DocumentationCompiler::new_code_line(cd->content, line, indentation-1), current_code);
match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, line, L"Table %c*")) {
code_is_tabular = TRUE;
}
Regexp::dispose_of(&mr);
Trees::make_child(DocumentationTree::new_code_line(cd->tree, line, indentation-1, code_is_tabular),
current_code);
@<Complete code@> =
if (current_code) {
current_code = NULL;
code_is_tabular = FALSE;
}
@
=
void DocumentationCompiler::render(pathname *P, compiled_documentation *cd, text_stream *extras) {
if (cd == NULL) return;
text_stream *OUT = DocumentationCompiler::open_subpage(P, I"index.html");
inform_extension *E = cd->associated_extension;
InformPages::header(OUT, I"Extension", JAVASCRIPT_FOR_ONE_EXTENSION_IRES, NULL);
HTML::incorporate_HTML(OUT, InstalledFiles::filename(EXTENSION_DOCUMENTATION_MODEL_IRES));
@<Write documentation for a specific extension into the page@>;
InformPages::footer(OUT);
DocumentationCompiler::close_subpage();
}
text_stream DOCF_struct;
text_stream *DOCF = NULL;
text_stream *DocumentationCompiler::open_subpage(pathname *P, text_stream *leaf) {
if (P == NULL) return STDOUT;
if (DOCF) internal_error("nested DC writes");
filename *F = Filenames::in(P, leaf);
DOCF = &DOCF_struct;
if (STREAM_OPEN_TO_FILE(DOCF, F, UTF8_ENC) == FALSE)
return NULL; /* if we lack permissions, e.g., then write no documentation */
return DOCF;
}
void DocumentationCompiler::close_subpage(void) {
if (DOCF == NULL) internal_error("no DC page open");
if (DOCF != STDOUT) STREAM_CLOSE(DOCF);
DOCF = NULL;
}
@<Write documentation for a specific extension into the page@> =
if (E) {
inbuild_edition *edition = E->as_copy->edition;
inbuild_work *work = edition->work;
HTML_OPEN("p");
if (Works::is_standard_rules(work) == FALSE)
@<Write Javascript paste icon for source text to include this extension@>;
WRITE("<b>");
Works::write_to_HTML_file(OUT, work, TRUE);
WRITE("</b>");
HTML_CLOSE("p");
HTML_OPEN("p");
HTML::begin_span(OUT, I"smaller");
@<Write up any restrictions on VM usage@>;
@<Write up the version number, if any, and location@>;
HTML::end_span(OUT);
HTML_CLOSE("p");
@<Write up the rubric, if any@>;
}
if (cd->empty) {
HTML_OPEN("p");
WRITE("There is no documentation.");
HTML_CLOSE("p");
} else {
@<Write up the table of contents for the supplied documentation, if any@>;
WRITE("%S", extras);
@<Write up the supplied documentation, if any@>;
}
@<Write Javascript paste icon for source text to include this extension@> =
TEMPORARY_TEXT(inclusion_text)
WRITE_TO(inclusion_text, "Include %X.\n\n\n", work);
PasteButtons::paste_text(OUT, inclusion_text);
DISCARD_TEXT(inclusion_text)
WRITE("&nbsp;");
@<Write up any restrictions on VM usage@> =
compatibility_specification *C = E->as_copy->edition->compatibility;
if (Str::len(C->parsed_from) > 0) {
WRITE("%S", C->parsed_from);
}
@<Write up the version number, if any, and location@> =
semantic_version_number V = E->as_copy->edition->version;
if (VersionNumbers::is_null(V) == FALSE) WRITE("Version %v", &V);
if (E->loaded_from_built_in_area) {
if (VersionNumbers::is_null(V)) { WRITE("Extension"); }
WRITE(" built in to Inform");
}
@<Write up the rubric, if any@> =
if (Str::len(E->rubric_as_lexed) > 0) {
HTML_OPEN("p"); WRITE("%S", E->rubric_as_lexed); HTML_CLOSE("p");
}
if (Str::len(E->extra_credit_as_lexed) > 0) {
HTML_OPEN("p"); WRITE("<i>%S</i>", E->extra_credit_as_lexed); HTML_CLOSE("p");
}
@ This appears above the definition paragraphs because it tends to be only
large extensions which provide TOCs: and they, ipso facto, make many definitions.
If the TOC were directly at the top of the supplied documentation, it might
easily be scrolled down off screen when the user first visits the page.
@<Write up the table of contents for the supplied documentation, if any@> =
Trees::traverse_from(cd->content->root, &DocumentationCompiler::toc, (void *) OUT, 0);
@<Write up the supplied documentation, if any@> =
HTML_OPEN("pre");
WRITE("%S\n", cd->original);
HTML_CLOSE("pre");
@
=
int DocumentationCompiler::toc(tree_node *N, void *state, int L) {
text_stream *OUT = (text_stream *) state;
if (N->type == heading_TNT) {
cdoc_heading *H = RETRIEVE_POINTER_cdoc_heading(N->content);
if (H->level > 0) {
if (H->ID == 1) HTML_TAG("hr"); /* ruled line at top of TOC */
HTML_OPEN("p");
HTML::begin_span(OUT, I"indexblack");
HTML_OPEN("b");
HTML_OPEN_WITH("a", "style=\"text-decoration: none\" href=#docsec%d", H->ID);
if (H->level == 1) WRITE("Chapter %S: ", H->count);
else WRITE("Section %S: ", H->count);
HTML_CLOSE("a");
HTML_CLOSE("b");
HTML::end_span(OUT);
WRITE("%S", H->name);
HTML_CLOSE("p");
}
}
if (N->type == example_TNT) {
cdoc_example *E = RETRIEVE_POINTER_cdoc_example(N->content);
TEMPORARY_TEXT(link)
WRITE_TO(link, "style=\"text-decoration: none\" href=\"eg%d.html#eg%d\"",
E->number, E->number);
HTML::begin_span(OUT, I"indexblack");
HTML_OPEN_WITH("a", "%S", link);
PUT(E->letter); /* the letter A to Z */
WRITE(" &mdash; ");
WRITE("%S", E->name);
HTML_CLOSE("a");
HTML::end_span(OUT);
DISCARD_TEXT(link)
}
return TRUE;
}

File diff suppressed because it is too large Load diff

View file

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

View file

@ -1,6 +1,7 @@
[ExtensionIndex::] Index Pages.
[ExtensionIndex::] Extensions Index Page.
To generate the two top-level pages in the extension mini-website.
To generate the index page for the extension mini-website, which is the home
page displayed in the Extensions tab for the Inform GUI apps.
@h Writing the extensions home page.
There were once two of these, but now there's just one.
@ -52,24 +53,15 @@ void ExtensionIndex::write(inform_project *proj) {
}
@<Write the body of the HTML@> =
ExtensionWebsite::add_home_breadcrumb(I"Extensions in this Project");
ExtensionWebsite::titling_and_navigation(OUT, I"Those installed and those used");
HTML::begin_html_table(OUT, NULL, TRUE, 0, 4, 0, 0, 0);
HTML::first_html_column(OUT, 0);
HTML_TAG_WITH("img",
"src='inform:/doc_images/extensions@2x.png' border=0 width=150 height=150");
HTML::next_html_column(OUT, 0);
HTML_OPEN_WITH("div", "class=\"headingpanellayout headingpanelalt\"");
HTML_OPEN_WITH("div", "class=\"headingtext\"");
HTML::begin_span(OUT, I"headingpaneltextalt");
WRITE("Extensions in this Project");
HTML::end_span(OUT);
HTML_CLOSE("div");
HTML_OPEN_WITH("div", "class=\"headingrubric\"");
HTML::begin_span(OUT, I"headingpanelrubricalt");
WRITE("Those installed and those used");
HTML::end_span(OUT);
HTML_CLOSE("div");
HTML_CLOSE("div");
@<Display the location of installed extensions@>;
HTML::end_html_row(OUT);
HTML::end_html_table(OUT);

View file

@ -1,4 +1,4 @@
[InbuildReport::] The Report.
[ExtensionInstaller::] The Installer.
To produce a report page of HTML for use in the Inform GUI apps, when a resource
such as an extension is inspected or installed.
@ -8,48 +8,30 @@ such as an extension is inspected or installed.
=
filename *inbuild_report_HTML = NULL;
void InbuildReport::set_filename(filename *F) {
void ExtensionInstaller::set_filename(filename *F) {
inbuild_report_HTML = F;
}
text_stream inbuild_report_file_struct; /* The actual report file */
text_stream *inbuild_report_file = NULL; /* As a |text_stream *| */
text_stream *InbuildReport::begin(text_stream *title, text_stream *subtitle) {
text_stream *ExtensionInstaller::begin(text_stream *title, text_stream *subtitle) {
if (inbuild_report_HTML == NULL) return NULL;
inbuild_report_file = &inbuild_report_file_struct;
if (STREAM_OPEN_TO_FILE(inbuild_report_file, inbuild_report_HTML, UTF8_ENC) == FALSE)
Errors::fatal("can't open report file");
InformPages::header(inbuild_report_file, title, JAVASCRIPT_FOR_STANDARD_PAGES_IRES, NULL);
text_stream *OUT = inbuild_report_file;
HTML::begin_html_table(OUT, NULL, TRUE, 0, 4, 0, 0, 0);
HTML::first_html_column(OUT, 0);
HTML_TAG_WITH("img",
"src='inform:/doc_images/importer@2x.png' border=0 width=150 height=150");
HTML::next_html_column(OUT, 0);
HTML_OPEN_WITH("div", "class=\"headingpanellayout headingpanelalt\"");
HTML_OPEN_WITH("div", "class=\"headingtext\"");
HTML::begin_span(OUT, I"headingpaneltextalt");
WRITE("%S", title);
HTML::end_span(OUT);
HTML_CLOSE("div");
HTML_OPEN_WITH("div", "class=\"headingrubric\"");
HTML::begin_span(OUT, I"headingpanelrubricalt");
WRITE("%S", subtitle);
HTML::end_span(OUT);
HTML_CLOSE("div");
HTML_CLOSE("div");
InformPages::header(OUT, title, JAVASCRIPT_FOR_STANDARD_PAGES_IRES, NULL);
ExtensionWebsite::add_home_breadcrumb(NULL);
ExtensionWebsite::add_breadcrumb(title, NULL);
ExtensionWebsite::titling_and_navigation(OUT, subtitle);
return OUT;
}
void InbuildReport::end(void) {
void ExtensionInstaller::end(void) {
if (inbuild_report_file) {
text_stream *OUT = inbuild_report_file;
HTML::end_html_row(OUT);
HTML::end_html_table(OUT);
HTML_TAG("hr");
InformPages::footer(OUT);
}
@ -63,7 +45,7 @@ the Installer is called again, with |confirmed| true. It takes action and also
produces a second report.
=
void InbuildReport::install(inbuild_copy *C, int confirmed, pathname *to_tool) {
void ExtensionInstaller::install(inbuild_copy *C, int confirmed, pathname *to_tool) {
inform_project *project = Supervisor::project_set_at_command_line();
if (project == NULL) Errors::fatal("-project not set at command line");
TEMPORARY_TEXT(pname)
@ -84,13 +66,13 @@ void InbuildReport::install(inbuild_copy *C, int confirmed, pathname *to_tool) {
@<Report on something else@>;
}
if (OUT) {
InbuildReport::end();
ExtensionInstaller::end();
}
DISCARD_TEXT(pname)
}
@<Report on something else@> =
OUT = InbuildReport::begin(I"Not an extension...", Genres::name(C->edition->work->genre));
OUT = ExtensionInstaller::begin(I"Not an extension...", Genres::name(C->edition->work->genre));
HTML_OPEN("p");
WRITE("Despite its file/directory name, this doesn't seem to be an extension, ");
WRITE("and it can't be installed.");
@ -106,7 +88,7 @@ void InbuildReport::install(inbuild_copy *C, int confirmed, pathname *to_tool) {
} else {
WRITE_TO(version, "Version %v of an extension", &V);
}
OUT = InbuildReport::begin(desc, version);
OUT = ExtensionInstaller::begin(desc, version);
DISCARD_TEXT(desc)
DISCARD_TEXT(version)
@ -114,7 +96,7 @@ void InbuildReport::install(inbuild_copy *C, int confirmed, pathname *to_tool) {
TEMPORARY_TEXT(desc)
WRITE_TO(desc, "This may be: ");
Editions::inspect(desc, C->edition);
OUT = InbuildReport::begin(I"Warning: Damaged extension", desc);
OUT = ExtensionInstaller::begin(I"Warning: Damaged extension", desc);
@<Make unconfirmed report@> =
if (N > 0) @<Report on damage to extension@>
@ -179,7 +161,7 @@ void InbuildReport::install(inbuild_copy *C, int confirmed, pathname *to_tool) {
@<List the extensions currently Included by the project@> =
int rc = 0, bic = 0, ic = 0;
InbuildReport::show_extensions(OUT, V, Graphs::get_unique_graph_scan_count(),
ExtensionInstaller::show_extensions(OUT, V, Graphs::get_unique_graph_scan_count(),
FALSE, &bic, FALSE, &ic, FALSE, &rc);
if (ic > 0) {
HTML_OPEN("p");
@ -187,14 +169,14 @@ void InbuildReport::install(inbuild_copy *C, int confirmed, pathname *to_tool) {
WRITE("basis of what it Includes, and what they in turn Include), which it has installed:");
HTML_CLOSE("p");
HTML_OPEN("ul");
InbuildReport::show_extensions(OUT, V, Graphs::get_unique_graph_scan_count(),
ExtensionInstaller::show_extensions(OUT, V, Graphs::get_unique_graph_scan_count(),
FALSE, &bic, TRUE, &ic, FALSE, &rc);
HTML_CLOSE("ul");
if (bic > 0) {
HTML_OPEN("p");
WRITE("not counting extensions built into Inform which do not need to be installed (");
bic = 0;
InbuildReport::show_extensions(OUT, V, Graphs::get_unique_graph_scan_count(),
ExtensionInstaller::show_extensions(OUT, V, Graphs::get_unique_graph_scan_count(),
TRUE, &bic, FALSE, &ic, FALSE, &rc);
WRITE(").");
HTML_OPEN("p");
@ -205,7 +187,7 @@ void InbuildReport::install(inbuild_copy *C, int confirmed, pathname *to_tool) {
"The project %S uses only extensions ", pname);
WRITE("built into Inform which do not need to be installed (");
bic = 0;
InbuildReport::show_extensions(OUT, V, Graphs::get_unique_graph_scan_count(),
ExtensionInstaller::show_extensions(OUT, V, Graphs::get_unique_graph_scan_count(),
TRUE, &bic, FALSE, &ic, FALSE, &rc);
WRITE(") and are included automatically.");
HTML_CLOSE("p");
@ -221,7 +203,7 @@ void InbuildReport::install(inbuild_copy *C, int confirmed, pathname *to_tool) {
WRITE("The project asks to Include the following, not yet installed:");
HTML_CLOSE("p");
HTML_OPEN("ul");
InbuildReport::show_extensions(OUT, V, Graphs::get_unique_graph_scan_count(),
ExtensionInstaller::show_extensions(OUT, V, Graphs::get_unique_graph_scan_count(),
FALSE, &bic, FALSE, &ic, TRUE, &rc);
HTML_CLOSE("ul");
}
@ -238,7 +220,7 @@ void InbuildReport::install(inbuild_copy *C, int confirmed, pathname *to_tool) {
LOOP_OVER_LINKED_LIST(search_result, inbuild_search_result, L) {
if (LinkedLists::len(search_result->copy->errors_reading_source_text) > 0)
broken++;
else if (InbuildReport::seek_extension_in_graph(search_result->copy, V) == FALSE)
else if (ExtensionInstaller::seek_extension_in_graph(search_result->copy, V) == FALSE)
unused++;
}
if (unused + broken > 0) {
@ -251,7 +233,7 @@ void InbuildReport::install(inbuild_copy *C, int confirmed, pathname *to_tool) {
HTML_OPEN("ul");
LOOP_OVER_LINKED_LIST(search_result, inbuild_search_result, L) {
if (LinkedLists::len(search_result->copy->errors_reading_source_text) == 0) {
if (InbuildReport::seek_extension_in_graph(search_result->copy, V) == FALSE) {
if (ExtensionInstaller::seek_extension_in_graph(search_result->copy, V) == FALSE) {
HTML_OPEN("li");
Copies::write_copy(OUT, search_result->copy);
WRITE("&nbsp;&nbsp;");
@ -419,7 +401,7 @@ void InbuildReport::install(inbuild_copy *C, int confirmed, pathname *to_tool) {
@
=
void InbuildReport::show_extensions(OUTPUT_STREAM, build_vertex *V, int scan_count,
void ExtensionInstaller::show_extensions(OUTPUT_STREAM, build_vertex *V, int scan_count,
int built_in, int *built_in_count, int installed, int *installed_count,
int required, int *requirements_count) {
if (V->type == COPY_VERTEX) {
@ -468,17 +450,17 @@ void InbuildReport::show_extensions(OUTPUT_STREAM, build_vertex *V, int scan_cou
}
build_vertex *W;
LOOP_OVER_LINKED_LIST(W, build_vertex, V->build_edges)
InbuildReport::show_extensions(OUT, W, scan_count, built_in, built_in_count,
ExtensionInstaller::show_extensions(OUT, W, scan_count, built_in, built_in_count,
installed, installed_count, required, requirements_count);
LOOP_OVER_LINKED_LIST(W, build_vertex, V->use_edges)
InbuildReport::show_extensions(OUT, W, scan_count, built_in, built_in_count,
ExtensionInstaller::show_extensions(OUT, W, scan_count, built_in, built_in_count,
installed, installed_count, required, requirements_count);
}
@
=
int InbuildReport::seek_extension_in_graph(inbuild_copy *C, build_vertex *V) {
int ExtensionInstaller::seek_extension_in_graph(inbuild_copy *C, build_vertex *V) {
if (V->type == COPY_VERTEX) {
inbuild_copy *VC = V->as_copy;
if (Editions::cmp(C->edition, VC->edition) == 0)
@ -486,10 +468,10 @@ int InbuildReport::seek_extension_in_graph(inbuild_copy *C, build_vertex *V) {
}
build_vertex *W;
LOOP_OVER_LINKED_LIST(W, build_vertex, V->build_edges)
if (InbuildReport::seek_extension_in_graph(C, W))
if (ExtensionInstaller::seek_extension_in_graph(C, W))
return TRUE;
LOOP_OVER_LINKED_LIST(W, build_vertex, V->use_edges)
if (InbuildReport::seek_extension_in_graph(C, W))
if (ExtensionInstaller::seek_extension_in_graph(C, W))
return TRUE;
return FALSE;
}

View file

@ -148,19 +148,72 @@ void ExtensionWebsite::document_extension(inform_extension *E, int force_update,
if (LinkedLists::len(E->as_copy->errors_reading_source_text) > 0) {
LOG("Not writing documentation on %X because it has copy errors\n", work);
} else {
compiled_documentation *doc = Extensions::get_documentation(E);
LOG("Writing documentation on %X\n", work);
inbuild_edition *edition = E->as_copy->edition;
filename *F = ExtensionWebsite::cut_way_for_page(proj, edition, -1);
if (F == NULL) return;
pathname *P = Filenames::up(F);
if (Pathnames::create_in_file_system(P) == 0) return;
TEMPORARY_TEXT(details);
compiled_documentation *doc = Extensions::get_documentation(E);
TEMPORARY_TEXT(OUT)
#ifdef CORE_MODULE
TEMPORARY_TEXT(details)
IndexExtensions::document_in_detail(details, E);
if (Str::len(details) > 0) {
HTML_TAG("hr"); /* ruled line at top of extras */
HTML_OPEN_WITH("p", "class=\"extensionsubheading\"");
WRITE("defined these in the last run");
HTML_CLOSE("p");
HTML_OPEN("div");
HTML_CLOSE("div");
WRITE("%S", details);
}
DISCARD_TEXT(details)
#endif
DocumentationCompiler::render(P, doc, details);
DISCARD_TEXT(details);
DocumentationRenderer::as_HTML(P, doc, OUT);
DISCARD_TEXT(OUT)
}
E->documented_on_this_run = TRUE;
}
text_stream *EXW_breadcrumb_titles[5] = { NULL, NULL, NULL, NULL, NULL };
text_stream *EXW_breakcrumb_URLs[5] = { NULL, NULL, NULL, NULL, NULL };
int no_EXW_breadcrumbs = 0;
void ExtensionWebsite::add_home_breadcrumb(text_stream *title) {
if (title == NULL) title = I"Extensions";
ExtensionWebsite::add_breadcrumb(title,
I"inform:/Extensions/Reserved/Documentation/Extensions.html");
}
void ExtensionWebsite::add_breadcrumb(text_stream *title, text_stream *URL) {
if (no_EXW_breadcrumbs >= 5) internal_error("too many breadcrumbs");
EXW_breadcrumb_titles[no_EXW_breadcrumbs] = Str::duplicate(title);
EXW_breakcrumb_URLs[no_EXW_breadcrumbs] = Str::duplicate(URL);
no_EXW_breadcrumbs++;
}
void ExtensionWebsite::titling_and_navigation(OUTPUT_STREAM, text_stream *subtitle) {
HTML_OPEN_WITH("div", "class=\"headingpanellayout headingpanelalt\"");
HTML_OPEN_WITH("div", "class=\"headingtext\"");
HTML::begin_span(OUT, I"headingpaneltextalt");
for (int i=0; i<no_EXW_breadcrumbs; i++) {
if (i>0) WRITE(" &gt; ");
if ((i != no_EXW_breadcrumbs-1) && (Str::len(EXW_breakcrumb_URLs[i]) > 0)) {
HTML_OPEN_WITH("a", "href=\"%S\" class=\"registrycontentslink\"", EXW_breakcrumb_URLs[i]);
}
DocumentationRenderer::render_text(OUT, EXW_breadcrumb_titles[i]);
if ((i != no_EXW_breadcrumbs-1) && (Str::len(EXW_breakcrumb_URLs[i]) > 0)) {
HTML_CLOSE("a");
}
}
HTML::end_span(OUT);
HTML_CLOSE("div");
HTML_OPEN_WITH("div", "class=\"headingrubric\"");
HTML::begin_span(OUT, I"headingpanelrubricalt");
DocumentationRenderer::render_text(OUT, subtitle);
HTML::end_span(OUT);
HTML_CLOSE("div");
HTML_CLOSE("div");
no_EXW_breadcrumbs = 0;
}

View file

@ -61,7 +61,8 @@ Chapter 6: Inform Source Text
Chapter 7: Extension Indexing
The Mini-Website
Index Pages
Documentation Renderer
Extensions Index Page
The Installer
Documentation Tree
Documentation Compiler
The Report
Documentation Renderer

View file

@ -1,15 +1,15 @@
Size of lexicon: 3163 excerpt meanings
Stored among 856 words out of total vocabulary of 10784
720 words have a start list: longest belongs to report (with 293 meanings)
Size of lexicon: 3162 excerpt meanings
Stored among 855 words out of total vocabulary of 10626
719 words have a start list: longest belongs to report (with 293 meanings)
21 words have an end list: longest belongs to digits (with 7 meanings)
29 words have a middle list: longest belongs to to (with 4 meanings)
108 words have a subset list: longest belongs to street (with 4 meanings)
Number of attempts to retrieve: 110552
of which unsuccessful: 92407
of which successful: 18145
Number of attempts to retrieve: 110520
of which unsuccessful: 92374
of which successful: 18146
Total attempts to match against excerpt meanings: 279588
of which, total with incorrect hash codes: 256844
of which, total with correct hash codes: 22744
of which, total which matched: 19912
Total attempts to match against excerpt meanings: 279412
of which, total with incorrect hash codes: 256664
of which, total with correct hash codes: 22748
of which, total which matched: 19917

File diff suppressed because it is too large Load diff

View file

@ -1,72 +1,72 @@
Total memory consumption was 138264K = 135 MB
Total memory consumption was 138473K = 135 MB
---- was used for 2115213 objects, in 374491 frames in 0 x 800K = 0K = 0 MB:
---- was used for 2115566 objects, in 374745 frames in 0 x 800K = 0K = 0 MB:
30.5% inter_tree_node_array 60 x 8192 = 491520 objects, 43255680 bytes
19.1% text_stream_array 4813 x 100 = 481300 objects, 27106816 bytes
17.9% linked_list 45345 objects, 25393200 bytes
19.1% text_stream_array 4815 x 100 = 481500 objects, 27118080 bytes
17.9% linked_list 45341 objects, 25390960 bytes
10.1% inter_symbol_array 135 x 1024 = 138240 objects, 14381280 bytes
9.9% inter_error_stash_array 107 x 1024 = 109568 objects, 14028128 bytes
7.5% parse_node 133713 objects, 10697040 bytes
9.8% inter_error_stash_array 107 x 1024 = 109568 objects, 14028128 bytes
7.5% parse_node 133764 objects, 10701120 bytes
5.3% verb_conjugation 164 objects, 7610912 bytes
4.0% parse_node_annotation_array 357 x 500 = 178500 objects, 5723424 bytes
3.1% scan_directory 1090 objects, 4499520 bytes
2.4% pcalc_prop_array 26 x 1000 = 26000 objects, 3536832 bytes
2.2% inter_name_array 67 x 1000 = 67000 objects, 3218144 bytes
1.9% kind_array 68 x 1000 = 68000 objects, 2722176 bytes
1.5% inter_schema_token 14185 objects, 2156120 bytes
1.5% inter_schema_token 14176 objects, 2154752 bytes
1.4% inter_name_generator_array 51 x 1000 = 51000 objects, 2041632 bytes
1.3% package_request 21341 objects, 1878008 bytes
1.3% vocabulary_entry_array 165 x 100 = 16500 objects, 1853280 bytes
1.1% dict_entry_array 483 x 100 = 48300 objects, 1561056 bytes
1.0% inter_symbols_table 26914 objects, 1507184 bytes
1.3% package_request 21340 objects, 1877920 bytes
1.2% vocabulary_entry_array 163 x 100 = 16300 objects, 1830816 bytes
1.1% dict_entry_array 484 x 100 = 48400 objects, 1564288 bytes
1.0% inter_symbols_table 26913 objects, 1507128 bytes
1.0% match_trie_array 11 x 1000 = 11000 objects, 1496352 bytes
1.0% i6_schema_array 24 x 100 = 2400 objects, 1440768 bytes
0.9% inter_package 26914 objects, 1291872 bytes
0.9% inter_package 26913 objects, 1291824 bytes
0.8% map_data 677 objects, 1137360 bytes
0.7% id_body 977 objects, 1117688 bytes
0.7% adjective_meaning 208 objects, 1030016 bytes
0.7% inter_schema_node 9070 objects, 1015840 bytes
0.6% excerpt_meaning 3163 objects, 986856 bytes
0.6% production 4002 objects, 928464 bytes
0.6% ptoken 8704 objects, 905216 bytes
0.6% grammatical_usage 3649 objects, 875760 bytes
0.6% individual_form 2582 objects, 867552 bytes
0.7% inter_schema_node 9066 objects, 1015392 bytes
0.6% excerpt_meaning 3162 objects, 986544 bytes
0.6% production 3985 objects, 924520 bytes
0.6% ptoken 8652 objects, 899808 bytes
0.6% grammatical_usage 3648 objects, 875520 bytes
0.6% individual_form 2581 objects, 867216 bytes
0.4% unary_predicate_array 17 x 1000 = 17000 objects, 680544 bytes
0.3% local_variable_array 49 x 100 = 4900 objects, 471968 bytes
0.2% verb_usage 1148 objects, 394912 bytes
0.2% rule 478 objects, 374752 bytes
0.2% dictionary 7752 objects, 372096 bytes
0.2% dictionary 7751 objects, 372048 bytes
0.2% verb_form 388 objects, 350752 bytes
0.2% noun 2396 objects, 287520 bytes
0.2% noun 2395 objects, 287400 bytes
0.1% compilation_subtask 3388 objects, 271040 bytes
0.1% inference_subject 672 objects, 263424 bytes
0.1% inter_annotation_array 2 x 8192 = 16384 objects, 262208 bytes
0.1% vanilla_function 3807 objects, 243648 bytes
0.1% binary_predicate 330 objects, 174240 bytes
0.1% hierarchy_location 1189 objects, 171216 bytes
0.1% linguistic_stock_item 3339 objects, 160272 bytes
0.1% linguistic_stock_item 3338 objects, 160224 bytes
0.1% rule_family_data 404 objects, 148672 bytes
0.1% nonterminal 779 objects, 143336 bytes
0.1% nonterminal 773 objects, 142232 bytes
---- nascent_array 2130 objects, 136320 bytes
---- inference 1705 objects, 122760 bytes
---- pcalc_term_array 3 x 1000 = 3000 objects, 120096 bytes
---- documentation_ref 1276 objects, 112288 bytes
---- inter_schema 1543 objects, 111096 bytes
---- inter_schema 1542 objects, 111024 bytes
---- imperative_defn 1415 objects, 101880 bytes
---- noun_usage 2420 objects, 96800 bytes
---- noun_usage 2419 objects, 96760 bytes
---- anl_entry_array 2 x 1000 = 2000 objects, 96064 bytes
---- inter_tree 7 objects, 95872 bytes
---- preposition 274 objects, 87680 bytes
---- lexical_cluster 2536 objects, 81152 bytes
---- kind_variable_declaration 1656 objects, 79488 bytes
---- lexical_cluster 2535 objects, 81120 bytes
---- kind_variable_declaration 1659 objects, 79632 bytes
---- rulebook 407 objects, 78144 bytes
---- label_namespace 1480 objects, 71040 bytes
---- spatial_data 677 objects, 64992 bytes
---- kind_constructor 79 objects, 64464 bytes
---- linked_list_item_array 4 x 1000 = 4000 objects, 64128 bytes
---- scenes_rcd_data 1954 objects, 62528 bytes
---- actions_rcd_data 1954 objects, 62528 bytes
---- scenes_rcd_data 1954 objects, 62528 bytes
---- booking 868 objects, 62496 bytes
---- kind_macro_definition 9 objects, 62280 bytes
---- command_grammar 130 objects, 58240 bytes
@ -81,19 +81,19 @@ Total memory consumption was 138264K = 135 MB
---- heading 212 objects, 47488 bytes
---- text_substitution 438 objects, 42048 bytes
---- to_family_data 525 objects, 42000 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 633 objects, 35448 bytes
---- production_list 627 objects, 35112 bytes
---- regions_data 677 objects, 32496 bytes
---- counting_data 677 objects, 32496 bytes
---- property_permission 96 objects, 31488 bytes
---- stack_frame_box 307 objects, 29472 bytes
---- verb_sense 407 objects, 29304 bytes
---- action_pattern_array 7 x 100 = 700 objects, 28224 bytes
---- filename 703 objects, 28120 bytes
---- pathname 665 objects, 26600 bytes
---- filename 702 objects, 28080 bytes
---- pathname 664 objects, 26560 bytes
---- shared_variable_set_array 6 x 100 = 600 objects, 24192 bytes
---- parse_node_tree 27 objects, 23544 bytes
---- property 148 objects, 22496 bytes
@ -109,13 +109,14 @@ Total memory consumption was 138264K = 135 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
---- adjective 140 objects, 15680 bytes
---- JSON_value 174 objects, 15312 bytes
---- booking_list 407 objects, 13024 bytes
---- web_bibliographic_datum 203 objects, 12992 bytes
---- adjective_iname_holder 323 objects, 12920 bytes
---- tree_node 149 objects, 11920 bytes
---- uniqueness_count 482 objects, 11568 bytes
---- inter_construct 32 objects, 11008 bytes
---- stopwatch_timer 124 objects, 9920 bytes
@ -131,31 +132,32 @@ Total memory consumption was 138264K = 135 MB
---- text_literal_holder 164 objects, 6560 bytes
---- inbuild_edition 85 objects, 6120 bytes
---- section_md 62 objects, 5952 bytes
---- parsed_use_option_setting 80 objects, 5760 bytes
---- parsed_use_option_setting 79 objects, 5688 bytes
---- activity 35 objects, 5040 bytes
---- build_script 157 objects, 5024 bytes
---- inform_extension 26 objects, 4992 bytes
---- explicit_action_array 1 x 100 objects, 4832 bytes
---- value_property_data 86 objects, 4816 bytes
---- compatibility_specification 100 objects, 4800 bytes
---- inform_extension 26 objects, 4784 bytes
---- parsing_pp_data 96 objects, 4608 bytes
---- command_line_switch 55 objects, 4400 bytes
---- cdoc_code_line 110 objects, 4400 bytes
---- semver_range 42 objects, 4368 bytes
---- use_option 32 objects, 4352 bytes
---- parse_node_annotation_type 124 objects, 3968 bytes
---- use_option 31 objects, 4216 bytes
---- either_or_property_data 62 objects, 3968 bytes
---- method_set 108 objects, 3456 bytes
---- parse_node_annotation_type 124 objects, 3968 bytes
---- definition 48 objects, 3456 bytes
---- property_setting_bp_data 86 objects, 3440 bytes
---- method_set 108 objects, 3456 bytes
---- submodule_request 86 objects, 3440 bytes
---- property_setting_bp_data 86 objects, 3440 bytes
---- kind_constructor_comparison_schema_array 1 x 100 objects, 3232 bytes
---- target_vm 20 objects, 2880 bytes
---- JSON_type 39 objects, 2808 bytes
---- JSON_single_requirement 55 objects, 2640 bytes
---- parentage_inference_data 79 objects, 2528 bytes
---- part_of_inference_data 79 objects, 2528 bytes
---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 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
@ -165,11 +167,11 @@ Total memory consumption was 138264K = 135 MB
---- inform_pipeline 24 objects, 1536 bytes
---- inbuild_requirement 37 objects, 1480 bytes
---- noun_filter_token 22 objects, 1408 bytes
---- special_meaning_holder 35 objects, 1400 bytes
---- inter_node_array 35 objects, 1400 bytes
---- special_meaning_holder 35 objects, 1400 bytes
---- JSON_requirement 42 objects, 1344 bytes
---- table_column 16 objects, 1280 bytes
---- constant_phrase 20 objects, 1280 bytes
---- table_column 16 objects, 1280 bytes
---- invocation_options_array 1 x 100 objects, 1224 bytes
---- direction_inference_data 30 objects, 1200 bytes
---- inbuild_search_result 29 objects, 1160 bytes
@ -178,12 +180,12 @@ Total memory consumption was 138264K = 135 MB
---- runtime_kind_structure 13 objects, 1040 bytes
---- quantifier 16 objects, 1024 bytes
---- web_md 7 objects, 1008 bytes
---- named_rulebook_outcome 15 objects, 960 bytes
---- pipeline_stage 20 objects, 960 bytes
---- named_rulebook_outcome 15 objects, 960 bytes
---- JSON_pair_requirement 29 objects, 928 bytes
---- control_structure_phrase 12 objects, 864 bytes
---- kit_configuration 21 objects, 840 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
@ -192,10 +194,11 @@ Total memory consumption was 138264K = 135 MB
---- implication 13 objects, 624 bytes
---- chapter_md 7 objects, 616 bytes
---- code_generation 1 object, 576 bytes
---- module 7 objects, 560 bytes
---- inter_annotation_form 14 objects, 560 bytes
---- cdoc_paragraph 18 objects, 576 bytes
---- inter_warehouse_room 10 objects, 560 bytes
---- generated_segment 14 objects, 560 bytes
---- inter_annotation_form 14 objects, 560 bytes
---- module 7 objects, 560 bytes
---- rulebook_outcome 17 objects, 544 bytes
---- small_word_set 11 objects, 528 bytes
---- i6_memory_setting 15 objects, 480 bytes
@ -203,64 +206,72 @@ Total memory consumption was 138264K = 135 MB
---- bp_family 14 objects, 448 bytes
---- inbuild_genre 8 objects, 448 bytes
---- inference_family 11 objects, 440 bytes
---- source_file 5 objects, 400 bytes
---- article_usage 8 objects, 384 bytes
---- source_file 5 objects, 360 bytes
---- door_dir_notice 5 objects, 320 bytes
---- pronoun 8 objects, 320 bytes
---- tree_inventory 1 object, 320 bytes
---- cached_kind_declaration 8 objects, 320 bytes
---- module_request 8 objects, 320 bytes
---- grammatical_category 8 objects, 320 bytes
---- cached_kind_declaration 8 objects, 320 bytes
---- tree_inventory 1 object, 320 bytes
---- door_dir_notice 5 objects, 320 bytes
---- pronoun 8 objects, 320 bytes
---- inter_pipeline 1 object, 312 bytes
---- compiled_documentation 4 objects, 288 bytes
---- up_family 9 objects, 288 bytes
---- door_to_notice 5 objects, 280 bytes
---- tree_node_type 6 objects, 288 bytes
---- compilation_unit 5 objects, 280 bytes
---- explicit_bp_data 5 objects, 280 bytes
---- contents_entry 7 objects, 280 bytes
---- compilation_unit 5 objects, 280 bytes
---- verb_usage_tier 5 objects, 240 bytes
---- door_to_notice 5 objects, 280 bytes
---- kit_dependency 5 objects, 240 bytes
---- verb_usage_tier 5 objects, 240 bytes
---- inform_project 1 object, 232 bytes
---- local_block_value 4 objects, 224 bytes
---- adjective_meaning_family 7 objects, 224 bytes
---- local_block_value 4 objects, 224 bytes
---- test_scenario 1 object, 216 bytes
---- release_instructions 1 object, 208 bytes
---- attachment_instruction 5 objects, 200 bytes
---- build_skill 5 objects, 200 bytes
---- code_generator 5 objects, 200 bytes
---- plural_dictionary_entry 4 objects, 192 bytes
---- attachment_instruction 5 objects, 200 bytes
---- cdoc_heading 4 objects, 192 bytes
---- cdoc_code_sample 6 objects, 192 bytes
---- element_activation 6 objects, 192 bytes
---- inter_architecture 4 objects, 160 bytes
---- inference_subject_family 5 objects, 160 bytes
---- plural_dictionary_entry 4 objects, 192 bytes
---- cdoc_passage 7 objects, 168 bytes
---- imperative_defn_family 4 objects, 160 bytes
---- inter_architecture 4 objects, 160 bytes
---- cdoc_example 4 objects, 160 bytes
---- heterogeneous_tree 4 objects, 160 bytes
---- inference_subject_family 5 objects, 160 bytes
---- inbuild_nest 3 objects, 120 bytes
---- inform_language 1 object, 104 bytes
---- article 2 objects, 80 bytes
---- group_together_function 2 objects, 80 bytes
---- compile_task_data 1 object, 80 bytes
---- article 2 objects, 80 bytes
---- inter_warehouse 1 object, 56 bytes
---- figures_data 1 object, 56 bytes
---- build_methodology 1 object, 56 bytes
---- figures_data 1 object, 56 bytes
---- inform_kit_ittt 1 object, 48 bytes
---- HTML_file_state 1 object, 48 bytes
---- star_invention 1 object, 48 bytes
---- HTML_file_state 1 object, 48 bytes
---- tree_type 1 object, 40 bytes
---- loop_over_scope 1 object, 40 bytes
---- target_pragma_setting 1 object, 40 bytes
---- I6_generation_data 1 object, 40 bytes
---- kind_template_definition 1 object, 40 bytes
---- I6_generation_data 1 object, 40 bytes
---- by_function_bp_data 1 object, 40 bytes
---- target_pragma_setting 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.0% text stream storage 87822344 bytes in 501586 claims
3.7% dictionary storage 5378048 bytes in 7752 claims
62.0% text stream storage 88036640 bytes in 501783 claims
3.7% dictionary storage 5377536 bytes in 7751 claims
---- sorting 2624 bytes in 531 claims
5.0% source text 7200000 bytes in 3 claims
7.6% source text details 10800000 bytes in 2 claims
0.1% documentation fragments 262144 bytes in 1 claim
---- linguistic stock array 81920 bytes in 2 claims
---- small word set array 105600 bytes in 22 claims
3.3% inter symbols storage 4704336 bytes in 28292 claims
11.8% inter bytecode storage 16757348 bytes in 15 claims
3.3% inter symbols storage 4703712 bytes in 28290 claims
11.8% inter bytecode storage 16758140 bytes in 15 claims
4.3% inter links storage 6222976 bytes in 11 claims
0.1% inter tree location list storage 191232 bytes in 32 claims
1.2% instance-of-kind counting 1731856 bytes in 1 claim
@ -269,5 +280,5 @@ Total memory consumption was 138264K = 135 MB
---- code generation workspace for objects 3488 bytes in 19 claims
0.1% emitter array storage 281184 bytes in 2006 claims
-137.-4% was overhead - -194584872 bytes = -190024K = -185 MB
-137.-2% was overhead - -194583184 bytes = -190022K = -185 MB

View file

@ -1,29 +1,29 @@
<s-literal> hits 2128/24682 nti 25 constraint (none) extremes [1, infinity)
<s-literal> hits 2131/24680 nti 19 constraint (none) extremes [1, infinity)
English:
(@1)<cardinal-number>=1
(hits 171/171) (matched: '100') constraint CS = {r0} extremes [1, 1]
(@1)minus (@2)<cardinal-number>=1
(hits 0/1393) constraint DS = {25} extremes [2, 2]
(hits 0/1627) constraint DS = {19} extremes [2, 2]
(@1)hexadecimal (@2)<hexadecimal-number>=1
(hits 0/1393) constraint DS = {25} extremes [2, 2]
(hits 0/1627) constraint DS = {19} extremes [2, 2]
(@1)binary (@2)<binary-number>=1
(hits 0/1393) constraint DS = {25} extremes [2, 2]
(hits 0/1627) constraint DS = {19} extremes [2, 2]
(@1)octal (@2)<octal-number>=1
(hits 0/1393) constraint DS = {25} extremes [2, 2]
(hits 0/1627) constraint DS = {19} extremes [2, 2]
(@1)<quoted-text>=1 (@2)( (@3)<response-letter>=2 (@4))
(hits 274/841) (matched: '"[current item from the multiple object list]: [run paragraph on]" ( a )') constraint DS = {25} extremes [4, 4]
(hits 274/846) (matched: '"[current item from the multiple object list]: [run paragraph on]" ( a )') constraint DS = {19} extremes [4, 4]
(@1)<quoted-text>=1
(hits 1572/5753) (matched: 'Can be used for objects which are purely
(hits 1575/5756) (matched: 'Can be used for objects which are purely
conceptual, like ideas, or are needed for internal book-keeping.') constraint (none) extremes [1, 1]
<s-literal-real-number>=1
(hits 11/10324) (matched: 'plus infinity') constraint (none) extremes [1, infinity)
(hits 11/10320) (matched: 'plus infinity') constraint (none) extremes [1, infinity)
(@1)<s-literal-truth-state>=1
(hits 100/115) (matched: 'false') constraint CS = {19} extremes [1, 1]
(hits 100/379) (matched: 'false') constraint CS = {13} extremes [1, 1]
<s-literal-list>=1
(hits 0/3339) constraint DS = {21} extremes [2, infinity)
(hits 0/3246) constraint DS = {15} extremes [2, infinity)
(@1)unicode <s-unicode-character>=1
(hits 0/3535) constraint DS = {25} extremes [2, infinity)
(hits 0/3994) constraint DS = {19} extremes [2, infinity)
<s-literal-time>=1
(hits 0/3471) constraint DW = {22, 23, 24} extremes [2, 5]
(hits 0/3569) constraint DW = {16, 17, 18} extremes [2, 5]
<s-literal-unit-notation>=1
(hits 0/10213) constraint (none) extremes [1, infinity)
(hits 0/10209) constraint (none) extremes [1, infinity)

View file

@ -1,29 +1,29 @@
100.0% in inform7 run
67.5% in compilation to Inter
44.7% in //Sequence::undertake_queued_tasks//
5.0% in //MajorNodes::pre_pass//
3.4% in //MajorNodes::pass_1//
67.9% in compilation to Inter
45.8% in //Sequence::undertake_queued_tasks//
4.5% in //MajorNodes::pre_pass//
3.8% 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 //InferenceSubjects::emit_all//
0.3% in //MajorNodes::pass_2//
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
28.1% in running Inter pipeline
9.6% 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
4.2% not specifically accounted for
27.8% in running Inter pipeline
9.5% in step 14/15: generate inform6 -> auto.inf
6.8% in step 5/15: load-binary-kits
6.1% in step 6/15: make-synoptic-module
1.9% in step 9/15: make-identifiers-unique
0.3% in step 12/15: eliminate-redundant-operations
0.3% in step 4/15: compile-splats
0.3% in step 7/15: shorten-wiring
0.3% in step 8/15: detect-indirect-calls
2.3% not specifically accounted for
1.9% not specifically accounted for
3.4% in supervisor
0.8% not specifically accounted for

View file

@ -1 +0,0 @@
<table CELLPADDING=0 CELLSPACING=0 width="100%" bgcolor="#000000"><tr><TD width=38px height=26px align="center" valign="center"><a href="inform://Extensions/Extensions.html" border=0><img border=0 src="inform:/doc_images/Hookindex.png" border=0></a></td><TD width=38px height=26px align="center" valign="center"></td><td halign="left" valign="center" CELLPADDING=0 CELLSPACING=0><font color="#FFFFFF" size=2>Extensions</font></a></td><TD width=56px height=26px align="right" valign="center"><a href="inform:/index.html" border=0><img border=0 src="inform:/doc_images/Hookup.png" border=0></a></td></tr></table>

View file

@ -1,42 +0,0 @@
*, *:before, *:after {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.oval, .oval TD {
background-image:url('inform:/doc_images/ovoid.png');
color:white;
}
.headingbox {
position: relative;
height: 56px;
padding: 0px;
white-space:nowrap;
background: #808080;
font-family: "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif;
-webkit-font-smoothing: antialiased;
}
.headingtext {
position: absolute;
top: -4px;
left: -1px;
width: 100%;
color: #ffffff;
padding: 14px 10px 0px 10px;
font-size: 20px;
font-weight: bold;
}
.headingrubric {
position: absolute;
top: 36px;
width: 100%;
color: #ffffff;
padding: 0px 10px 0px 10px;
font-size: 11px;
font-weight: bold;
}
p {
font-family: "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif;
-webkit-font-smoothing: antialiased;
font-size: 12px;
}

View file

@ -344,6 +344,38 @@ li.unleaded:before {
content: "";
}
/* Used for the contents pages in extensions indexes: */
ul.extensioncontents {
padding: 0;
margin-top: 4px;
overflow-x: hidden;
list-style: none
}
li.exco1 {
margin-top: 4px;
padding-left: 0px;
margin-bottom: 6px;
}
li.exco2 {
padding-left: 20px;
margin-bottom: 6px;
}
li.exco3 {
padding-left: 40px;
margin-bottom: 6px;
}
p.extensionsubheading {
text-transform: uppercase;
letter-spacing: 2px;
margin-top: 12px;
margin-bottom: 4px;
}
/* On Registry index pages (such as the Public Library), these are used for
download buttons and the like: */

File diff suppressed because one or more lines are too long

View file

@ -20,7 +20,6 @@ but they're just plain old files, and are not managed by Inbuild as "copies".
@e JAVASCRIPT_FOR_ONE_EXTENSION_IRES
@e CSS_SET_BY_PLATFORM_IRES
@e CSS_FOR_STANDARD_PAGES_IRES
@e EXTENSION_DOCUMENTATION_MODEL_IRES
@e RESOURCE_JSON_REQS_IRES
@e REGISTRY_JSON_REQS_IRES
@e INBUILD_JSON_REQS_IRES
@ -65,8 +64,6 @@ filename *InstalledFiles::filename(int ires) {
return InstalledFiles::varied_by_platform(models, I"platform.css");
case CSS_FOR_STANDARD_PAGES_IRES:
return InstalledFiles::varied_by_platform(models, I"main.css");
case EXTENSION_DOCUMENTATION_MODEL_IRES:
return InstalledFiles::varied_by_platform(models, I"extensionfile.html");
}
internal_error("unknown installation resource file");
return NULL;
@ -116,9 +113,6 @@ filename *InstalledFiles::filename_for_platform(int ires, text_stream *platform)
case CSS_FOR_STANDARD_PAGES_IRES:
return InstalledFiles::varied_by_named_platform(models,
I"main.css", platform);
case EXTENSION_DOCUMENTATION_MODEL_IRES:
return InstalledFiles::varied_by_named_platform(models,
I"extensionfile.html", platform);
}
return InstalledFiles::filename(ires);
}

View file

@ -1,15 +1,15 @@
Size of lexicon: 3163 excerpt meanings
Stored among 856 words out of total vocabulary of 10784
720 words have a start list: longest belongs to report (with 293 meanings)
Size of lexicon: 3162 excerpt meanings
Stored among 855 words out of total vocabulary of 10626
719 words have a start list: longest belongs to report (with 293 meanings)
21 words have an end list: longest belongs to digits (with 7 meanings)
29 words have a middle list: longest belongs to to (with 4 meanings)
108 words have a subset list: longest belongs to street (with 4 meanings)
Number of attempts to retrieve: 110552
of which unsuccessful: 92407
of which successful: 18145
Number of attempts to retrieve: 110520
of which unsuccessful: 92374
of which successful: 18146
Total attempts to match against excerpt meanings: 279588
of which, total with incorrect hash codes: 256844
of which, total with correct hash codes: 22744
of which, total which matched: 19912
Total attempts to match against excerpt meanings: 279412
of which, total with incorrect hash codes: 256664
of which, total with correct hash codes: 22748
of which, total which matched: 19917

View file

@ -1,12 +1,12 @@
adjective: 140 items
article: 2 items
noun: 2396 items
noun: 2395 items
pronoun: 8 items
preposition: 274 items
determiner: 22 items
verb: 109 items
verb_form: 388 items
total in all categories: 3339
total in all categories: 3338
adjective: 'even'
adjective: 'odd'
@ -657,7 +657,6 @@ noun: proper: 'engineering notation'
noun: proper: 'printed engineering notation'
noun: proper: 'predictable randomisation'
noun: proper: 'numbered rules'
noun: proper: 'telemetry recordings'
noun: proper: 'no deprecated features'
noun: proper: 'authorial modesty'
noun: proper: 'command line echoing'