mirror of
https://github.com/ganelson/inform.git
synced 2024-06-29 05:24:57 +03:00
Basic registry support in inbuild
This commit is contained in:
parent
78c9d2425e
commit
083fca85e8
|
@ -1,6 +1,6 @@
|
||||||
# Inform 7
|
# Inform 7
|
||||||
|
|
||||||
v10.1.0-beta+6V34 'Krypton' (24 July 2022)
|
v10.1.0-beta+6V35 'Krypton' (26 July 2022)
|
||||||
|
|
||||||
## About Inform 7
|
## About Inform 7
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
Prerelease: beta
|
Prerelease: beta
|
||||||
Build Date: 24 July 2022
|
Build Date: 26 July 2022
|
||||||
Build Number: 6V34
|
Build Number: 6V35
|
||||||
|
|
|
@ -239,8 +239,8 @@ convert between record numbers and dictionary addresses.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</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">VM_DictionaryAddressToNumber</span><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="identifier-syntax">w</span><span class="plain-syntax">-(</span><span class="identifier-syntax">HDR_DICTIONARY</span><span class="plain-syntax">-->0 + </span><span class="constant-syntax">7</span><span class="plain-syntax">))/9; ];</span>
|
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_DictionaryAddressToNumber</span><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="identifier-syntax">w</span><span class="plain-syntax">-(</span><span class="identifier-syntax">HDR_DICTIONARY</span><span class="plain-syntax">-->0 + </span><span class="constant-syntax">7</span><span class="plain-syntax">))/</span><span class="identifier-syntax">DICT_ENTRY_BYTES</span><span class="plain-syntax">; ];</span>
|
||||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_NumberToDictionaryAddress</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">HDR_DICTIONARY</span><span class="plain-syntax">-->0 + </span><span class="constant-syntax">7</span><span class="plain-syntax"> + </span><span class="constant-syntax">9</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">VM_NumberToDictionaryAddress</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">HDR_DICTIONARY</span><span class="plain-syntax">-->0 + </span><span class="constant-syntax">7</span><span class="plain-syntax"> + </span><span class="identifier-syntax">DICT_ENTRY_BYTES</span><span class="plain-syntax">*</span><span class="identifier-syntax">n</span><span class="plain-syntax">; ];</span>
|
||||||
</pre>
|
</pre>
|
||||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. Command Tables. </b>The VM is also generated containing a data structure for the grammar
|
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. Command Tables. </b>The VM is also generated containing a data structure for the grammar
|
||||||
produced by I6's <span class="extract"><span class="extract-syntax">Verb</span></span> and <span class="extract"><span class="extract-syntax">Extend</span></span> directives: this is essentially a
|
produced by I6's <span class="extract"><span class="extract-syntax">Verb</span></span> and <span class="extract"><span class="extract-syntax">Extend</span></span> directives: this is essentially a
|
||||||
|
@ -257,7 +257,7 @@ recognised by the parser.
|
||||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">VM_PrintCommandWords</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> </span><span class="identifier-syntax">da</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">VM_PrintCommandWords</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> </span><span class="identifier-syntax">da</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">da</span><span class="plain-syntax"> = </span><span class="identifier-syntax">HDR_DICTIONARY</span><span class="plain-syntax">-->0;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">da</span><span class="plain-syntax"> = </span><span class="identifier-syntax">HDR_DICTIONARY</span><span class="plain-syntax">-->0;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">j</span><span class="plain-syntax">=0 : </span><span class="identifier-syntax">j</span><span class="plain-syntax"><(</span><span class="identifier-syntax">da</span><span class="plain-syntax">+5)-->0 : </span><span class="identifier-syntax">j</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">j</span><span class="plain-syntax">=0 : </span><span class="identifier-syntax">j</span><span class="plain-syntax"><(</span><span class="identifier-syntax">da</span><span class="plain-syntax">+5)-->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">da</span><span class="plain-syntax">->(</span><span class="identifier-syntax">j</span><span class="plain-syntax">*9 + </span><span class="constant-syntax">14</span><span class="plain-syntax">) == </span><span class="constant-syntax">$ff</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">da</span><span class="plain-syntax">->(</span><span class="identifier-syntax">j</span><span class="plain-syntax">*</span><span class="identifier-syntax">DICT_ENTRY_BYTES</span><span class="plain-syntax"> + </span><span class="constant-syntax">14</span><span class="plain-syntax">) == </span><span class="constant-syntax">$ff</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">print</span><span class="plain-syntax"> </span><span class="string-syntax">"'"</span><span class="plain-syntax">, (</span><span class="identifier-syntax">address</span><span class="plain-syntax">) </span><span class="identifier-syntax">VM_NumberToDictionaryAddress</span><span class="plain-syntax">(</span><span class="identifier-syntax">j</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">print</span><span class="plain-syntax"> </span><span class="string-syntax">"'"</span><span class="plain-syntax">, (</span><span class="identifier-syntax">address</span><span class="plain-syntax">) </span><span class="identifier-syntax">VM_NumberToDictionaryAddress</span><span class="plain-syntax">(</span><span class="identifier-syntax">j</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>
|
||||||
</pre>
|
</pre>
|
||||||
|
|
|
@ -181,6 +181,10 @@ we will need for the code we are compiling. But this seems a good time to make i
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Global debug_flag;\n"</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">"Global debug_flag;\n"</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">"Global or_tmp_var;\n"</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">"Global or_tmp_var;\n"</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><a href="2-cg.html#SP12" class="function-link"><span class="function-syntax">CodeGen::deselect</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="2-cg.html#SP12" class="function-link"><span class="function-syntax">CodeGen::deselect</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">saved</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP12" class="function-link"><span class="function-syntax">CodeGen::select</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">ICL_directives_I7CGS</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP14" class="function-link"><span class="function-syntax">CodeGen::current</span></a><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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"!%% $ZCODE_LESS_DICT_DATA=1;\n"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="2-cg.html#SP12" class="function-link"><span class="function-syntax">CodeGen::deselect</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="4-fi6.html#SP4">§4</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="4-fi6.html#SP4">§4</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP4_2" class="paragraph-anchor"></a><b>§4.2. </b>As noted above, I6 will add a veneer of code to what we compile. That veneer
|
<p class="commentary firstcommentary"><a id="SP4_2" class="paragraph-anchor"></a><b>§4.2. </b>As noted above, I6 will add a veneer of code to what we compile. That veneer
|
||||||
|
|
|
@ -164,6 +164,7 @@ for example.
|
||||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">const_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"TARGET_ZCODE"</span><span class="plain-syntax">)) ||</span>
|
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">const_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"TARGET_ZCODE"</span><span class="plain-syntax">)) ||</span>
|
||||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">const_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"TARGET_GLULX"</span><span class="plain-syntax">)) ||</span>
|
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">const_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"TARGET_GLULX"</span><span class="plain-syntax">)) ||</span>
|
||||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">const_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"DICT_WORD_SIZE"</span><span class="plain-syntax">)) ||</span>
|
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">const_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"DICT_WORD_SIZE"</span><span class="plain-syntax">)) ||</span>
|
||||||
|
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">const_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"DICT_ENTRY_BYTES"</span><span class="plain-syntax">)) ||</span>
|
||||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">const_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"DEBUG"</span><span class="plain-syntax">)) ||</span>
|
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">const_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"DEBUG"</span><span class="plain-syntax">)) ||</span>
|
||||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">const_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"cap_short_name"</span><span class="plain-syntax">))) {</span>
|
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">const_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"cap_short_name"</span><span class="plain-syntax">))) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ifndef_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="identifier-syntax">ifndef_me</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
|
|
|
@ -79,7 +79,8 @@ 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">CSS_SET_BY_PLATFORM_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">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">EXTENSION_DOCUMENTATION_MODEL_IRES</span>
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">JSON_REQUIREMENTS_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>
|
||||||
</pre>
|
</pre>
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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/>Inform Pages - <a href="2-ip.html#SP1">§1</a><br/>Documentation References - <a href="2-dr2.html#SP3">§3</a>, <a href="2-dr2.html#SP11_1">§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/>Inform Pages - <a href="2-ip.html#SP1">§1</a><br/>Documentation References - <a href="2-dr2.html#SP3">§3</a>, <a href="2-dr2.html#SP11_1">§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>
|
||||||
|
@ -97,8 +98,10 @@ 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><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">misc</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"DefaultCover.jpg"</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">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">misc</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"DefaultCover.jpg"</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">SMALL_DEFAULT_COVER_ART_IRES:</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SMALL_DEFAULT_COVER_ART_IRES:</span>
|
||||||
<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">misc</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Small Cover.jpg"</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">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">misc</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Small Cover.jpg"</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">JSON_REQUIREMENTS_IRES:</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">RESOURCE_JSON_REQS_IRES:</span>
|
||||||
<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">misc</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"metadata.jsonr"</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">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">misc</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"resource.jsonr"</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">REGISTRY_JSON_REQS_IRES:</span>
|
||||||
|
<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">misc</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"registry.jsonr"</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">CBLORB_REPORT_MODEL_IRES:</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CBLORB_REPORT_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">"CblorbModel.html"</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#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">"CblorbModel.html"</span><span class="plain-syntax">);</span>
|
||||||
|
|
|
@ -71,6 +71,7 @@ function togglePopup(material_id) {
|
||||||
<span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">path_to_tools</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
<span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">path_to_tools</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">dry_run_mode</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">build_trace_mode</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">dry_run_mode</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">build_trace_mode</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</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="identifier-syntax">NULL</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="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="reserved-syntax">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">selected_registry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||||
<span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">filter_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
<span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">filter_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Main routine. </b>When Inbuild is called at the command line, it begins at <span class="extract"><span class="extract-syntax">main</span></span>, like all C
|
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Main routine. </b>When Inbuild is called at the command line, it begins at <span class="extract"><span class="extract-syntax">main</span></span>, like all C
|
||||||
|
@ -395,6 +396,8 @@ other options to the selection defined here.
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">COPY_TO_CLSW</span>
|
<span class="definition-keyword">enum</span> <span class="constant-syntax">COPY_TO_CLSW</span>
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">SYNC_TO_CLSW</span>
|
<span class="definition-keyword">enum</span> <span class="constant-syntax">SYNC_TO_CLSW</span>
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">VERSIONS_IN_FILENAMES_CLSW</span>
|
<span class="definition-keyword">enum</span> <span class="constant-syntax">VERSIONS_IN_FILENAMES_CLSW</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="constant-syntax">VERIFY_REGISTRY_CLSW</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="constant-syntax">BUILD_REGISTRY_CLSW</span>
|
||||||
</pre>
|
</pre>
|
||||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Read the command line</span><span class="named-paragraph-number">2.8</span></span><span class="comment-syntax"> =</span>
|
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Read the command line</span><span class="named-paragraph-number">2.8</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
@ -443,6 +446,10 @@ other options to the selection defined here.
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"apply to all works in nest(s) matching requirement X"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"apply to all works in nest(s) matching requirement X"</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP5" class="function-link"><span class="function-syntax">CommandLine::declare_switch</span></a><span class="plain-syntax">(</span><span class="constant-syntax">CONTENTS_OF_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"contents-of"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
|
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP5" class="function-link"><span class="function-syntax">CommandLine::declare_switch</span></a><span class="plain-syntax">(</span><span class="constant-syntax">CONTENTS_OF_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"contents-of"</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">L</span><span class="string-syntax">"apply to all targets in the directory X"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"apply to all targets in the directory X"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP5" class="function-link"><span class="function-syntax">CommandLine::declare_switch</span></a><span class="plain-syntax">(</span><span class="constant-syntax">VERIFY_REGISTRY_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"verify-registry"</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">L</span><span class="string-syntax">"verify roster.json metadata of registry in the directory X"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP5" class="function-link"><span class="function-syntax">CommandLine::declare_switch</span></a><span class="plain-syntax">(</span><span class="constant-syntax">BUILD_REGISTRY_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"build-registry"</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">L</span><span class="string-syntax">"construct HTML menu pages for registry in the directory X"</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><a href="../supervisor-module/1-ic.html#SP4" class="function-link"><span class="function-syntax">Supervisor::declare_options</span></a><span class="plain-syntax">();</span>
|
<span class="plain-syntax"> </span><a href="../supervisor-module/1-ic.html#SP4" class="function-link"><span class="function-syntax">Supervisor::declare_options</span></a><span class="plain-syntax">();</span>
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP8" class="function-link"><span class="function-syntax">CommandLine::read</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">argc</span><span class="plain-syntax">, </span><span class="identifier-syntax">argv</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, &</span><a href="1-mn.html#SP3" class="function-link"><span class="function-syntax">Main::option</span></a><span class="plain-syntax">, &</span><a href="1-mn.html#SP4" class="function-link"><span class="function-syntax">Main::bareword</span></a><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP8" class="function-link"><span class="function-syntax">CommandLine::read</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">argc</span><span class="plain-syntax">, </span><span class="identifier-syntax">argv</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, &</span><a href="1-mn.html#SP3" class="function-link"><span class="function-syntax">Main::option</span></a><span class="plain-syntax">, &</span><a href="1-mn.html#SP4" class="function-link"><span class="function-syntax">Main::bareword</span></a><span class="plain-syntax">);</span>
|
||||||
|
@ -485,6 +492,13 @@ 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">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">VERSIONS_IN_FILENAMES_CLSW:</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">VERSIONS_IN_FILENAMES_CLSW:</span>
|
||||||
<span class="plain-syntax"> </span><a href="../supervisor-module/2-edt.html#SP2" class="function-link"><span class="function-syntax">Editions::set_canonical_leaves_have_versions</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>
|
<span class="plain-syntax"> </span><a href="../supervisor-module/2-edt.html#SP2" class="function-link"><span class="function-syntax">Editions::set_canonical_leaves_have_versions</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>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">VERIFY_REGISTRY_CLSW:</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">BUILD_REGISTRY_CLSW:</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">selected_registry</span><span class="plain-syntax"> = </span><a href="../supervisor-module/2-rgs.html#SP2" class="function-link"><span class="function-syntax">Registries::new</span></a><span class="plain-syntax">(</span><a href="../../../inweb/foundation-module/3-pth.html#SP5" class="function-link"><span class="function-syntax">Pathnames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">));</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../supervisor-module/2-rgs.html#SP3" class="function-link"><span class="function-syntax">Registries::read_roster</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">selected_registry</span><span class="plain-syntax">) == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">exit</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">id</span><span class="plain-syntax"> == </span><span class="constant-syntax">BUILD_REGISTRY_CLSW</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="../supervisor-module/2-rgs.html#SP5" class="function-link"><span class="function-syntax">Registries::build</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">selected_registry</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><a href="../supervisor-module/1-ic.html#SP7" class="function-link"><span class="function-syntax">Supervisor::option</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="identifier-syntax">arg</span><span class="plain-syntax">, </span><span class="identifier-syntax">state</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="../supervisor-module/1-ic.html#SP7" class="function-link"><span class="function-syntax">Supervisor::option</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="identifier-syntax">arg</span><span class="plain-syntax">, </span><span class="identifier-syntax">state</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
|
@ -631,7 +631,7 @@ In the mean time, it seems premature to commit to any model.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="M-ui.html">❮</a></li><li class="progresscurrentchapter">M</li><li class="progresssection"><a href="M-ui.html">ui</a></li><li class="progresscurrent">agtk</li><li class="progresssection"><a href="M-agtlb.html">agtlb</a></li><li class="progresssection"><a href="M-agtpm.html">agtpm</a></li><li class="progresssection"><a href="M-rc.html">rc</a></li><li class="progresschapter"><a href="1-mn.html">1</a></li><li class="progressnext"><a href="M-agtlb.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="M-ui.html">❮</a></li><li class="progresscurrentchapter">M</li><li class="progresssection"><a href="M-ui.html">ui</a></li><li class="progresscurrent">agtk</li><li class="progresssection"><a href="M-agtlb.html">agtlb</a></li><li class="progresssection"><a href="M-agtpm.html">agtpm</a></li><li class="progresssection"><a href="M-agtr.html">agtr</a></li><li class="progresssection"><a href="M-rc.html">rc</a></li><li class="progresschapter"><a href="1-mn.html">1</a></li><li class="progressnext"><a href="M-agtlb.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -253,7 +253,7 @@ Note that this takes effect only if the user asks it to with a use option:
|
||||||
<span class="identifier-syntax">Use</span><span class="plain-syntax"> </span><span class="identifier-syntax">French</span><span class="plain-syntax"> </span><span class="identifier-syntax">language</span><span class="plain-syntax"> </span><span class="identifier-syntax">index</span><span class="plain-syntax">.</span>
|
<span class="identifier-syntax">Use</span><span class="plain-syntax"> </span><span class="identifier-syntax">French</span><span class="plain-syntax"> </span><span class="identifier-syntax">language</span><span class="plain-syntax"> </span><span class="identifier-syntax">index</span><span class="plain-syntax">.</span>
|
||||||
</pre>
|
</pre>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="M-agtk.html">❮</a></li><li class="progresscurrentchapter">M</li><li class="progresssection"><a href="M-ui.html">ui</a></li><li class="progresssection"><a href="M-agtk.html">agtk</a></li><li class="progresscurrent">agtlb</li><li class="progresssection"><a href="M-agtpm.html">agtpm</a></li><li class="progresssection"><a href="M-rc.html">rc</a></li><li class="progresschapter"><a href="1-mn.html">1</a></li><li class="progressnext"><a href="M-agtpm.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="M-agtk.html">❮</a></li><li class="progresscurrentchapter">M</li><li class="progresssection"><a href="M-ui.html">ui</a></li><li class="progresssection"><a href="M-agtk.html">agtk</a></li><li class="progresscurrent">agtlb</li><li class="progresssection"><a href="M-agtpm.html">agtpm</a></li><li class="progresssection"><a href="M-agtr.html">agtr</a></li><li class="progresssection"><a href="M-rc.html">rc</a></li><li class="progresschapter"><a href="1-mn.html">1</a></li><li class="progressnext"><a href="M-agtpm.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -166,7 +166,7 @@ use of <span class="extract"><span class="extract-syntax">-basic</span></span> t
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="M-agtlb.html">❮</a></li><li class="progresscurrentchapter">M</li><li class="progresssection"><a href="M-ui.html">ui</a></li><li class="progresssection"><a href="M-agtk.html">agtk</a></li><li class="progresssection"><a href="M-agtlb.html">agtlb</a></li><li class="progresscurrent">agtpm</li><li class="progresssection"><a href="M-rc.html">rc</a></li><li class="progresschapter"><a href="1-mn.html">1</a></li><li class="progressnext"><a href="M-rc.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="M-agtlb.html">❮</a></li><li class="progresscurrentchapter">M</li><li class="progresssection"><a href="M-ui.html">ui</a></li><li class="progresssection"><a href="M-agtk.html">agtk</a></li><li class="progresssection"><a href="M-agtlb.html">agtlb</a></li><li class="progresscurrent">agtpm</li><li class="progresssection"><a href="M-agtr.html">agtr</a></li><li class="progresssection"><a href="M-rc.html">rc</a></li><li class="progresschapter"><a href="1-mn.html">1</a></li><li class="progressnext"><a href="M-agtr.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
76
docs/inbuild/M-agtr.html
Normal file
76
docs/inbuild/M-agtr.html
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>A Guide to Registries</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">
|
||||||
|
<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 'A Guide to Registries' generated by Inweb-->
|
||||||
|
<div class="breadcrumbs">
|
||||||
|
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#M">Manual</a></li><li><b>A Guide to Registries</b></li></ul></div>
|
||||||
|
<p class="purpose">Provisional documentation on how to scan and build registries of Inform resources.</p>
|
||||||
|
|
||||||
|
<ul class="toc"><li><a href="M-agtr.html#SP1">§1. Registries</a></li></ul><hr class="tocbar">
|
||||||
|
|
||||||
|
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Registries. </b>A "registry" is a collection of Inform resources gathered together for others
|
||||||
|
to use. The Public Library presented in the Inform apps is a registry, for
|
||||||
|
example, but the idea is being generalised in inbuild with a view to future
|
||||||
|
developments.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="commentary">This page is a place-holder for now: see <a href="../supervisor-module/2-rgs.html" class="internal">Registries (in supervisor)</a> for
|
||||||
|
very slightly more.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="commentary">The PL presented as a registry can be seen at <a href="https://github.com/ganelson/inform-public-library" class="external">this repository</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<nav role="progress"><div class="progresscontainer">
|
||||||
|
<ul class="progressbar"><li class="progressprev"><a href="M-agtpm.html">❮</a></li><li class="progresscurrentchapter">M</li><li class="progresssection"><a href="M-ui.html">ui</a></li><li class="progresssection"><a href="M-agtk.html">agtk</a></li><li class="progresssection"><a href="M-agtlb.html">agtlb</a></li><li class="progresssection"><a href="M-agtpm.html">agtpm</a></li><li class="progresscurrent">agtr</li><li class="progresssection"><a href="M-rc.html">rc</a></li><li class="progresschapter"><a href="1-mn.html">1</a></li><li class="progressnext"><a href="M-rc.html">❯</a></li></ul></div>
|
||||||
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
|
@ -67,6 +67,7 @@ and those not documented in this manual are covered in that one.
|
||||||
<span class="plain-syntax">-build-locate show file paths of all the extensions, kits and so on needed to build</span>
|
<span class="plain-syntax">-build-locate show file paths of all the extensions, kits and so on needed to build</span>
|
||||||
<span class="plain-syntax">-build-missing show the extensions, kits and so on which are needed to build but missing</span>
|
<span class="plain-syntax">-build-missing show the extensions, kits and so on which are needed to build but missing</span>
|
||||||
<span class="plain-syntax">-build-needs show all the extensions, kits and so on needed to build</span>
|
<span class="plain-syntax">-build-needs show all the extensions, kits and so on needed to build</span>
|
||||||
|
<span class="plain-syntax">-build-registry X construct HTML menu pages for registry in the directory X</span>
|
||||||
<span class="plain-syntax">-build-trace show verbose reasoning during -build (default is -no-build-trace)</span>
|
<span class="plain-syntax">-build-trace show verbose reasoning during -build (default is -no-build-trace)</span>
|
||||||
<span class="plain-syntax">-contents-of X apply to all targets in the directory X</span>
|
<span class="plain-syntax">-contents-of X apply to all targets in the directory X</span>
|
||||||
<span class="plain-syntax">-copy-to X copy target(s) to nest X</span>
|
<span class="plain-syntax">-copy-to X copy target(s) to nest X</span>
|
||||||
|
@ -80,6 +81,7 @@ and those not documented in this manual are covered in that one.
|
||||||
<span class="plain-syntax">-use-locate show file paths of all the extensions, kits and so on needed to use</span>
|
<span class="plain-syntax">-use-locate show file paths of all the extensions, kits and so on needed to use</span>
|
||||||
<span class="plain-syntax">-use-missing show the extensions, kits and so on which are needed to use but missing</span>
|
<span class="plain-syntax">-use-missing show the extensions, kits and so on which are needed to use but missing</span>
|
||||||
<span class="plain-syntax">-use-needs show all the extensions, kits and so on needed to use</span>
|
<span class="plain-syntax">-use-needs show all the extensions, kits and so on needed to use</span>
|
||||||
|
<span class="plain-syntax">-verify-registry X verify roster.json metadata of registry in the directory X</span>
|
||||||
<span class="plain-syntax">-no-versions-in-filenames don't append _v number to destination filenames on -copy-to or -sync-to (default is -versions-in-filenames)</span>
|
<span class="plain-syntax">-no-versions-in-filenames don't append _v number to destination filenames on -copy-to or -sync-to (default is -versions-in-filenames)</span>
|
||||||
|
|
||||||
<span class="plain-syntax">for translating Inform source text to Inter:</span>
|
<span class="plain-syntax">for translating Inform source text to Inter:</span>
|
||||||
|
@ -115,7 +117,7 @@ and those not documented in this manual are covered in that one.
|
||||||
<span class="plain-syntax">-version print out version number</span>
|
<span class="plain-syntax">-version print out version number</span>
|
||||||
</pre>
|
</pre>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="M-agtpm.html">❮</a></li><li class="progresscurrentchapter">M</li><li class="progresssection"><a href="M-ui.html">ui</a></li><li class="progresssection"><a href="M-agtk.html">agtk</a></li><li class="progresssection"><a href="M-agtlb.html">agtlb</a></li><li class="progresssection"><a href="M-agtpm.html">agtpm</a></li><li class="progresscurrent">rc</li><li class="progresschapter"><a href="1-mn.html">1</a></li><li class="progressnext"><a href="1-mn.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="M-agtr.html">❮</a></li><li class="progresscurrentchapter">M</li><li class="progresssection"><a href="M-ui.html">ui</a></li><li class="progresssection"><a href="M-agtk.html">agtk</a></li><li class="progresssection"><a href="M-agtlb.html">agtlb</a></li><li class="progresssection"><a href="M-agtpm.html">agtpm</a></li><li class="progresssection"><a href="M-agtr.html">agtr</a></li><li class="progresscurrent">rc</li><li class="progresschapter"><a href="1-mn.html">1</a></li><li class="progressnext"><a href="1-mn.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -627,7 +627,7 @@ the project will still work exactly as it originally did.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprevoff">❮</li><li class="progresscurrentchapter">M</li><li class="progresscurrent">ui</li><li class="progresssection"><a href="M-agtk.html">agtk</a></li><li class="progresssection"><a href="M-agtlb.html">agtlb</a></li><li class="progresssection"><a href="M-agtpm.html">agtpm</a></li><li class="progresssection"><a href="M-rc.html">rc</a></li><li class="progresschapter"><a href="1-mn.html">1</a></li><li class="progressnext"><a href="M-agtk.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprevoff">❮</li><li class="progresscurrentchapter">M</li><li class="progresscurrent">ui</li><li class="progresssection"><a href="M-agtk.html">agtk</a></li><li class="progresssection"><a href="M-agtlb.html">agtlb</a></li><li class="progresssection"><a href="M-agtpm.html">agtpm</a></li><li class="progresssection"><a href="M-agtr.html">agtr</a></li><li class="progresssection"><a href="M-rc.html">rc</a></li><li class="progresschapter"><a href="1-mn.html">1</a></li><li class="progressnext"><a href="M-agtk.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -73,6 +73,11 @@
|
||||||
<spon class="sectiontitle">A Guide to Project Metadata</span></a> -
|
<spon class="sectiontitle">A Guide to Project Metadata</span></a> -
|
||||||
<span class="sectionpurpose">Provisional documentation on giving Inform projects JSON-based metadata.</span></p>
|
<span class="sectionpurpose">Provisional documentation on giving Inform projects JSON-based metadata.</span></p>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<p class="sectionentry"><a href="M-agtr.html">
|
||||||
|
<spon class="sectiontitle">A Guide to Registries</span></a> -
|
||||||
|
<span class="sectionpurpose">Provisional documentation on how to scan and build registries of Inform resources.</span></p>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p class="sectionentry"><a href="M-rc.html">
|
<p class="sectionentry"><a href="M-rc.html">
|
||||||
<spon class="sectiontitle">Reference Card</span></a> -
|
<spon class="sectiontitle">Reference Card</span></a> -
|
||||||
|
|
|
@ -846,6 +846,7 @@ and <a href="../pipeline-module/4-tsk.html" class="internal">The Standard Kits (
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">SLASH_TOKENS_HAP</span>
|
<span class="definition-keyword">enum</span> <span class="constant-syntax">SLASH_TOKENS_HAP</span>
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">SLASH_FN_HL</span>
|
<span class="definition-keyword">enum</span> <span class="constant-syntax">SLASH_FN_HL</span>
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">REPARSE_CODE_HL</span>
|
<span class="definition-keyword">enum</span> <span class="constant-syntax">REPARSE_CODE_HL</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="constant-syntax">DICT_ENTRY_BYTES_HL</span>
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">DICT_WORD_SIZE_HL</span>
|
<span class="definition-keyword">enum</span> <span class="constant-syntax">DICT_WORD_SIZE_HL</span>
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">VERB_DIRECTIVE_META_HL</span>
|
<span class="definition-keyword">enum</span> <span class="constant-syntax">VERB_DIRECTIVE_META_HL</span>
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">VERB_DIRECTIVE_NOUN_FILTER_HL</span>
|
<span class="definition-keyword">enum</span> <span class="constant-syntax">VERB_DIRECTIVE_NOUN_FILTER_HL</span>
|
||||||
|
@ -902,6 +903,7 @@ and <a href="../pipeline-module/4-tsk.html" class="internal">The Standard Kits (
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">H_BEGIN</span><span class="plain-syntax">(</span><span class="identifier-syntax">LocationRequirements::generic_submodule</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">grammar</span><span class="plain-syntax">))</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">H_BEGIN</span><span class="plain-syntax">(</span><span class="identifier-syntax">LocationRequirements::generic_submodule</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">grammar</span><span class="plain-syntax">))</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">H_C_T</span><span class="plain-syntax">(</span><span class="constant-syntax">REPARSE_CODE_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"REPARSE_CODE"</span><span class="plain-syntax">)</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">H_C_T</span><span class="plain-syntax">(</span><span class="constant-syntax">REPARSE_CODE_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"REPARSE_CODE"</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">H_C_T</span><span class="plain-syntax">(</span><span class="constant-syntax">DICT_ENTRY_BYTES_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"DICT_ENTRY_BYTES"</span><span class="plain-syntax">)</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">H_C_T</span><span class="plain-syntax">(</span><span class="constant-syntax">DICT_WORD_SIZE_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"DICT_WORD_SIZE"</span><span class="plain-syntax">)</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">H_C_T</span><span class="plain-syntax">(</span><span class="constant-syntax">DICT_WORD_SIZE_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"DICT_WORD_SIZE"</span><span class="plain-syntax">)</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">H_C_T</span><span class="plain-syntax">(</span><span class="constant-syntax">VERB_DIRECTIVE_META_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"VERB_DIRECTIVE_META"</span><span class="plain-syntax">)</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">H_C_T</span><span class="plain-syntax">(</span><span class="constant-syntax">VERB_DIRECTIVE_META_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"VERB_DIRECTIVE_META"</span><span class="plain-syntax">)</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">H_C_T</span><span class="plain-syntax">(</span><span class="constant-syntax">VERB_DIRECTIVE_NOUN_FILTER_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"VERB_DIRECTIVE_NOUN_FILTER"</span><span class="plain-syntax">)</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">H_C_T</span><span class="plain-syntax">(</span><span class="constant-syntax">VERB_DIRECTIVE_NOUN_FILTER_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"VERB_DIRECTIVE_NOUN_FILTER"</span><span class="plain-syntax">)</span>
|
||||||
|
|
|
@ -106,6 +106,8 @@ fact rewritten it, so that the whole command must be re-parsed afresh.
|
||||||
<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="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><span class="constant-syntax">9</span><span 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="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><span class="constant-syntax">9</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><a href="7-cg.html#SP3" class="function-link"><span class="function-syntax">RTCommandGrammars::grammar_constant</span></a><span class="plain-syntax">(</span><span class="constant-syntax">DICT_WORD_SIZE_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="7-cg.html#SP3" class="function-link"><span class="function-syntax">RTCommandGrammars::grammar_constant</span></a><span class="plain-syntax">(</span><span class="constant-syntax">DICT_WORD_SIZE_HL</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">TargetVMs::is_16_bit</span><span class="plain-syntax">(</span><span class="identifier-syntax">VM</span><span class="plain-syntax">))</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="7-cg.html#SP3" class="function-link"><span class="function-syntax">RTCommandGrammars::grammar_constant</span></a><span class="plain-syntax">(</span><span class="constant-syntax">DICT_ENTRY_BYTES_HL</span><span class="plain-syntax">, </span><span class="constant-syntax">8</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b></p>
|
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b></p>
|
||||||
|
|
|
@ -86,6 +86,7 @@ which use this module:
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">inbuild_edition_CLASS</span>
|
<span class="definition-keyword">enum</span> <span class="constant-syntax">inbuild_edition_CLASS</span>
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">inbuild_genre_CLASS</span>
|
<span class="definition-keyword">enum</span> <span class="constant-syntax">inbuild_genre_CLASS</span>
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">inbuild_nest_CLASS</span>
|
<span class="definition-keyword">enum</span> <span class="constant-syntax">inbuild_nest_CLASS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="constant-syntax">inbuild_registry_CLASS</span>
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">inbuild_requirement_CLASS</span>
|
<span class="definition-keyword">enum</span> <span class="constant-syntax">inbuild_requirement_CLASS</span>
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">inbuild_search_result_CLASS</span>
|
<span class="definition-keyword">enum</span> <span class="constant-syntax">inbuild_search_result_CLASS</span>
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">inbuild_work_CLASS</span>
|
<span class="definition-keyword">enum</span> <span class="constant-syntax">inbuild_work_CLASS</span>
|
||||||
|
@ -117,6 +118,7 @@ which use this module:
|
||||||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax">)</span>
|
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_edition</span><span class="plain-syntax">)</span>
|
||||||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_genre</span><span class="plain-syntax">)</span>
|
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_genre</span><span class="plain-syntax">)</span>
|
||||||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax">)</span>
|
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_registry</span><span class="plain-syntax">)</span>
|
||||||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax">)</span>
|
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax">)</span>
|
||||||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax">)</span>
|
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax">)</span>
|
||||||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax">)</span>
|
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax">)</span>
|
||||||
|
|
|
@ -296,7 +296,7 @@ output.
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="2-ce.html#SP5">§5</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="2-ce.html#SP5">§5</a>.</li></ul>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="2-cps.html">❮</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="progresssection"><a href="2-wrk.html">wrk</a></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="progresscurrent">ce</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-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-rqr.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="2-cps.html">❮</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="progresssection"><a href="2-wrk.html">wrk</a></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="progresscurrent">ce</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-rqr.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -331,7 +331,7 @@ its main task: building an Inform project.
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="2-edt.html">❮</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="progresssection"><a href="2-wrk.html">wrk</a></li><li class="progresssection"><a href="2-edt.html">edt</a></li><li class="progresscurrent">cps</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-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-ce.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="2-edt.html">❮</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="progresssection"><a href="2-wrk.html">wrk</a></li><li class="progresssection"><a href="2-edt.html">edt</a></li><li class="progresscurrent">cps</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-ce.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -148,7 +148,7 @@ contributes only the un-filename-extended leafname <span class="extract"><span c
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="2-wrk.html">❮</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="progresssection"><a href="2-wrk.html">wrk</a></li><li class="progresscurrent">edt</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-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-cps.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="2-wrk.html">❮</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="progresssection"><a href="2-wrk.html">wrk</a></li><li class="progresscurrent">edt</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-cps.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -242,7 +242,7 @@ the Inbuild command-line options <span class="extract"><span class="extract-synt
|
||||||
<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">build_methodology</span><span class="plain-syntax"> *</span><span class="identifier-syntax">meth</span><span class="plain-syntax">)</span>
|
||||||
</pre>
|
</pre>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="1-ic.html">❮</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="progresscurrent">gnr</li><li class="progresssection"><a href="2-wrk.html">wrk</a></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-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-wrk.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="1-ic.html">❮</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="progresscurrent">gnr</li><li class="progresssection"><a href="2-wrk.html">wrk</a></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-wrk.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -91,7 +91,7 @@ identifying the copy which it purports to identify.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">compatibility</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="2-jm.html#SP1_6" class="named-paragraph-link"><span class="named-paragraph">Extract compatibility</span><span class="named-paragraph-number">1.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">compatibility</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="2-jm.html#SP1_6" class="named-paragraph-link"><span class="named-paragraph">Extract compatibility</span><span class="named-paragraph-number">1.6</span></a></span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">JSONMetadata::read_metadata_file_helper</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="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">,</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">JSONMetadata::read_metadata_file_helper</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">JSONMetadata::read_metadata_file_helper</span></span>:<br/>Registries - <a href="2-rgs.html#SP3">§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">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">,</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">v_state</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">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">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><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>
|
||||||
|
@ -289,7 +289,7 @@ checking here results in more explicit error messages.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">JSONMetadata::not_both</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">JSONMetadata::not_both</span></span>:<br/><a href="2-jm.html#SP1_4">§1.4</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">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">clause</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">where</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">JSONMetadata::not_both</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">JSONMetadata::not_both</span></span>:<br/><a href="2-jm.html#SP1_4">§1.4</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">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">clause</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">where</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">clause</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">clause</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">version</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">clause</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"version"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">version</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">clause</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"version"</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">version_range</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">clause</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"version-range"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">version_range</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">clause</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"version-range"</span><span class="plain-syntax">);</span>
|
||||||
|
@ -339,9 +339,9 @@ loads only once.
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="identifier-syntax">dictionary</span><span class="plain-syntax"> *</span><span class="identifier-syntax">JSON_resource_metadata_requirements</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
<span class="identifier-syntax">dictionary</span><span class="plain-syntax"> *</span><span class="identifier-syntax">JSON_resource_metadata_requirements</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
<span class="identifier-syntax">JSON_requirement</span><span class="plain-syntax"> *</span><span class="function-syntax">JSONMetadata::requirements</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">JSONMetadata::requirements</span></span>:<br/><a href="2-jm.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
<span class="identifier-syntax">JSON_requirement</span><span class="plain-syntax"> *</span><span class="function-syntax">JSONMetadata::requirements</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">JSONMetadata::requirements</span></span>:<br/><a href="2-jm.html#SP1">§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">JSON_resource_metadata_requirements</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">JSON_resource_metadata_requirements</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">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InstalledFiles::filename</span><span class="plain-syntax">(</span><span class="identifier-syntax">JSON_REQUIREMENTS_IRES</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">InstalledFiles::filename</span><span class="plain-syntax">(</span><span class="identifier-syntax">RESOURCE_JSON_REQS_IRES</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_resource_metadata_requirements</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::read_requirements_file</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</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">JSON_resource_metadata_requirements</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::read_requirements_file</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</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">JSON_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">JSON_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax"> =</span>
|
||||||
|
@ -351,7 +351,7 @@ loads only once.
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="2-nst.html">❮</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="progresssection"><a href="2-wrk.html">wrk</a></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="progresscurrent">jm</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="3-bg.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="2-rgs.html">❮</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="progresssection"><a href="2-wrk.html">wrk</a></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="progresscurrent">jm</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="3-bg.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -73,7 +73,7 @@ positions in the file system hierarchy which may or may not exist.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tag_value</span><span class="plain-syntax">; </span><span class="comment-syntax"> used to indicate whether internal, external, and such</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tag_value</span><span class="plain-syntax">; </span><span class="comment-syntax"> used to indicate whether internal, external, and such</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</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="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="function-syntax">Nests::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">Nests::new</span></span>:<br/>Inbuild Control - <a href="1-ic.html#SP12">§12</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">inbuild_nest</span><span class="plain-syntax"> *</span><span class="function-syntax">Nests::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">Nests::new</span></span>:<br/>Inbuild Control - <a href="1-ic.html#SP12">§12</a><br/>Registries - <a href="2-rgs.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</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">N</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</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">N</span><span class="plain-syntax">-></span><span class="element-syntax">location</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">N</span><span class="plain-syntax">-></span><span class="element-syntax">location</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">N</span><span class="plain-syntax">-></span><span class="element-syntax">read_only</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">N</span><span class="plain-syntax">-></span><span class="element-syntax">read_only</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
|
@ -81,7 +81,7 @@ positions in the file system hierarchy which may or may not exist.
|
||||||
<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">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="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>The structure inbuild_nest is accessed in 1/ic, 3/bg, 3/is2, 4/em, 4/km, 4/lm, 4/pm, 4/tm, 5/ps2 and here.</li></ul>
|
<ul class="endnotetexts"><li>The structure inbuild_nest is accessed in 1/ic, 2/rgs, 3/bg, 3/is2, 4/em, 4/km, 4/lm, 4/pm, 4/tm, 5/ps2 and here.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Nests used by the Inform and Inbuild tools are tagged with the following
|
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Nests used by the Inform and Inbuild tools are tagged with the following
|
||||||
constants. (There used to be quite a good joke here, but refactoring of the
|
constants. (There used to be quite a good joke here, but refactoring of the
|
||||||
code removed its premise. Literate programming is like that sometimes.)
|
code removed its premise. Literate programming is like that sometimes.)
|
||||||
|
@ -151,7 +151,7 @@ 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="identifier-syntax">CLASS_DEFINITION</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">inbuild_search_result</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>The structure inbuild_search_result is accessed in 2/ce, 3/is, 5/ks, 5/ls, 6/inc, 7/dct, 7/cns, 7/ip, 7/ip2 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/dct, 7/cns, 7/ip, 7/ip2 and here.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b>These can be created only as entries in a list:
|
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b>These can be created only as entries in a list:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -226,7 +226,7 @@ semantic version numbers.
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="2-rqr.html">❮</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="progresssection"><a href="2-wrk.html">wrk</a></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="progresscurrent">nst</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-jm.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="2-rqr.html">❮</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="progresssection"><a href="2-wrk.html">wrk</a></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="progresscurrent">nst</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-rgs.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
743
docs/supervisor-module/2-rgs.html
Normal file
743
docs/supervisor-module/2-rgs.html
Normal file
|
@ -0,0 +1,743 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Registries</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 'Registries' 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#2">Chapter 2: Conceptual Framework</a></li><li><b>Registries</b></li></ul></div>
|
||||||
|
<p class="purpose">Registries are nests provided with metadata and intended to be presented as an online source from which Inform resources can be downloaded.</p>
|
||||||
|
|
||||||
|
<ul class="toc"><li><a href="2-rgs.html#SP1">§1. Creation</a></li><li><a href="2-rgs.html#SP3">§3. The roster</a></li><li><a href="2-rgs.html#SP5">§5. Building</a></li><li><a href="2-rgs.html#SP23">§23. Escapology</a></li><li><a href="2-rgs.html#SP24">§24. Looking up by textual ID</a></li></ul><hr class="tocbar">
|
||||||
|
|
||||||
|
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Creation. </b>To "create" a registry here does not mean actually altering the file system, for
|
||||||
|
example by making a directory: registries here are merely notes in memory of
|
||||||
|
positions in the file system hierarchy which may or may not exist.
|
||||||
|
</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">inbuild_registry</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">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">location</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">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nest</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">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">roster</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">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/km, 4/lm, 4/pm, 4/tm, 5/ps2, 6/inc, 7/cns, 7/ip and here.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b></p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="reserved-syntax">inbuild_registry</span><span class="plain-syntax"> *</span><span class="function-syntax">Registries::new</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="plain-syntax"> </span><span class="reserved-syntax">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_registry</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">-></span><span class="element-syntax">location</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">N</span><span class="plain-syntax">-></span><span class="element-syntax">nest</span><span class="plain-syntax"> = </span><a href="2-nst.html#SP1" class="function-link"><span class="function-syntax">Nests::new</span></a><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">"payloads"</span><span class="plain-syntax">));</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">-></span><span class="element-syntax">roster</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">;</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. The roster. </b>This is a JSON file called <span class="extract"><span class="extract-syntax">roster.json</span></span>, whose schema must match the one specified
|
||||||
|
by the file <span class="extract"><span class="extract-syntax">registry-metadata.jsonr</span></span> in the standard Inform distribution.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="commentary">The following silently returns <span class="extract"><span class="extract-syntax">TRUE</span></span> if it does, or prints errors and returns
|
||||||
|
<span class="extract"><span class="extract-syntax">FALSE</span></span> if not (or if it doesn't exist).
|
||||||
|
</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">Registries::read_roster</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_registry</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">R</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 registry"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">roster</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">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">R</span><span class="plain-syntax">-></span><span class="element-syntax">location</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"roster.json"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TextFiles::exists</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="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">"%f: roster file does not exist\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="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="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">contents</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 JSON metadata"</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">,</span>
|
||||||
|
<span class="plain-syntax"> &</span><a href="2-jm.html#SP1" class="function-link"><span class="function-syntax">JSONMetadata::read_metadata_file_helper</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">contents</span><span class="plain-syntax">);</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="identifier-syntax">TextFiles::at</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</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">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">obj</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::decode</span><span class="plain-syntax">(</span><span class="identifier-syntax">contents</span><span class="plain-syntax">, &</span><span class="identifier-syntax">tfp</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">contents</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">obj</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">obj</span><span class="plain-syntax">-></span><span class="identifier-syntax">JSON_type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">ERROR_JSONTYPE</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">"%f: JSON syntax error: %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_error</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">else</span><span class="plain-syntax"> {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax"> = </span><a href="2-rgs.html#SP4" class="function-link"><span class="function-syntax">Registries::requirements</span></a><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">validation_errors</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">JSON::validate</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="identifier-syntax">validation_errors</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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">err</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</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">validation_errors</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">"%f: metadata did not validate: '%S'\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">err</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">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="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">roster</span><span class="plain-syntax"> = </span><span class="identifier-syntax">obj</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="SP4" class="paragraph-anchor"></a><b>§4. </b>The following schema validates the metadata for a registry, and is cached
|
||||||
|
so that it only needs to load once.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="identifier-syntax">dictionary</span><span class="plain-syntax"> *</span><span class="identifier-syntax">JSON_registry_metadata_requirements</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
|
<span class="identifier-syntax">JSON_requirement</span><span class="plain-syntax"> *</span><span class="function-syntax">Registries::requirements</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">Registries::requirements</span></span>:<br/><a href="2-rgs.html#SP3">§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">JSON_registry_metadata_requirements</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">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InstalledFiles::filename</span><span class="plain-syntax">(</span><span class="identifier-syntax">REGISTRY_JSON_REQS_IRES</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_registry_metadata_requirements</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::read_requirements_file</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_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">JSON::look_up_requirements</span><span class="plain-syntax">(</span><span class="identifier-syntax">JSON_registry_metadata_requirements</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"registry-metadata"</span><span 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="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"JSON metadata file did not define <registry-metadata>"</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">req</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Building. </b>To "build" a registry doesn't involve very much: just putting some indexing
|
||||||
|
files together, using the preprocessor built into <a href="../../../inweb/foundation-module/index.html" class="internal">foundation</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="commentary">If the registry is <span class="extract"><span class="extract-syntax">R</span></span>, we preprocess each file <span class="extract"><span class="extract-syntax">R/source/X.Y</span></span> into <span class="extract"><span class="extract-syntax">R/X.Y</span></span>:
|
||||||
|
</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">Registries::build</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_registry</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">R</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 registry"</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">ML</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">preprocessor_macro</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-rgs.html#SP5_1" class="named-paragraph-link"><span class="named-paragraph">Construct the list of custom macros for this sort of preprocessing</span><span class="named-paragraph-number">5.1</span></a></span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">location</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"source"</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">Directories::listing</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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</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">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</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">Platform::is_folder_separator</span><span class="plain-syntax">(</span><span class="identifier-syntax">Str::get_last_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</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="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">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</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">EXT</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::write_extension</span><span class="plain-syntax">(</span><span class="identifier-syntax">EXT</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">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">EXT</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">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">location</span><span class="plain-syntax">, </span><span class="identifier-syntax">Filenames::get_leafname</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">STDOUT</span><span class="plain-syntax">, </span><span class="string-syntax">"%f -> %f\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</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">Preprocessor::preprocess</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">ML</span><span class="plain-syntax">,</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">STORE_POINTER_inbuild_registry</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">), </span><span class="character-syntax">'#'</span><span class="plain-syntax">, </span><span class="identifier-syntax">UTF8_ENC</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">EXT</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="SP5_1" class="paragraph-anchor"></a><b>§5.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Construct the list of custom macros for this sort of preprocessing</span><span class="named-paragraph-number">5.1</span></span><span class="comment-syntax"> =</span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Preprocessor::new_macro</span><span class="plain-syntax">(</span><span class="identifier-syntax">ML</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"include"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"file: LEAFNAME"</span><span class="plain-syntax">,</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="2-rgs.html#SP6" class="function-link"><span class="function-syntax">Registries::include_expander</span></a><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">Preprocessor::new_macro</span><span class="plain-syntax">(</span><span class="identifier-syntax">ML</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"process"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"file: LEAFNAME"</span><span class="plain-syntax">,</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="2-rgs.html#SP7" class="function-link"><span class="function-syntax">Registries::process_expander</span></a><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">Preprocessor::do_not_suppress_whitespace</span><span class="plain-syntax">(</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Preprocessor::new_macro</span><span class="plain-syntax">(</span><span class="identifier-syntax">ML</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"section"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"of: ID"</span><span class="plain-syntax">,</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="2-rgs.html#SP11" class="function-link"><span class="function-syntax">Registries::section_expander</span></a><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">Preprocessor::do_not_suppress_whitespace</span><span class="plain-syntax">(</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Preprocessor::new_macro</span><span class="plain-syntax">(</span><span class="identifier-syntax">ML</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"subsection"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"of: ID"</span><span class="plain-syntax">,</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="2-rgs.html#SP12" class="function-link"><span class="function-syntax">Registries::subsection_expander</span></a><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">Preprocessor::do_not_suppress_whitespace</span><span class="plain-syntax">(</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Preprocessor::new_macro</span><span class="plain-syntax">(</span><span class="identifier-syntax">ML</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"author"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"of: ID ?escape: WHICH"</span><span class="plain-syntax">,</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="2-rgs.html#SP13" class="function-link"><span class="function-syntax">Registries::author_expander</span></a><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">Preprocessor::do_not_suppress_whitespace</span><span class="plain-syntax">(</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Preprocessor::new_macro</span><span class="plain-syntax">(</span><span class="identifier-syntax">ML</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"title"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"of: ID ?escape: WHICH"</span><span class="plain-syntax">,</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="2-rgs.html#SP14" class="function-link"><span class="function-syntax">Registries::title_expander</span></a><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">Preprocessor::do_not_suppress_whitespace</span><span class="plain-syntax">(</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Preprocessor::new_macro</span><span class="plain-syntax">(</span><span class="identifier-syntax">ML</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"version"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"of: ID ?escape: WHICH"</span><span class="plain-syntax">,</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="2-rgs.html#SP15" class="function-link"><span class="function-syntax">Registries::version_expander</span></a><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">Preprocessor::do_not_suppress_whitespace</span><span class="plain-syntax">(</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Preprocessor::new_macro</span><span class="plain-syntax">(</span><span class="identifier-syntax">ML</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"summary"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"of: ID ?escape: WHICH"</span><span class="plain-syntax">,</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="2-rgs.html#SP16" class="function-link"><span class="function-syntax">Registries::summary_expander</span></a><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">Preprocessor::do_not_suppress_whitespace</span><span class="plain-syntax">(</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Preprocessor::new_macro</span><span class="plain-syntax">(</span><span class="identifier-syntax">ML</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"forum-thread"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"of: ID"</span><span class="plain-syntax">,</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="2-rgs.html#SP17" class="function-link"><span class="function-syntax">Registries::thread_expander</span></a><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">Preprocessor::do_not_suppress_whitespace</span><span class="plain-syntax">(</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Preprocessor::new_macro</span><span class="plain-syntax">(</span><span class="identifier-syntax">ML</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"section-mark"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"of: ID"</span><span class="plain-syntax">,</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="2-rgs.html#SP19" class="function-link"><span class="function-syntax">Registries::section_mark_expander</span></a><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">Preprocessor::do_not_suppress_whitespace</span><span class="plain-syntax">(</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Preprocessor::new_macro</span><span class="plain-syntax">(</span><span class="identifier-syntax">ML</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"section-title"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"of: ID"</span><span class="plain-syntax">,</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="2-rgs.html#SP20" class="function-link"><span class="function-syntax">Registries::section_title_expander</span></a><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">Preprocessor::do_not_suppress_whitespace</span><span class="plain-syntax">(</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Preprocessor::new_macro</span><span class="plain-syntax">(</span><span class="identifier-syntax">ML</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"subsection-mark"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"of: ID"</span><span class="plain-syntax">,</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="2-rgs.html#SP21" class="function-link"><span class="function-syntax">Registries::subsection_mark_expander</span></a><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">Preprocessor::do_not_suppress_whitespace</span><span class="plain-syntax">(</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Preprocessor::new_macro</span><span class="plain-syntax">(</span><span class="identifier-syntax">ML</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"subsection-title"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"of: ID"</span><span class="plain-syntax">,</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="2-rgs.html#SP22" class="function-link"><span class="function-syntax">Registries::subsection_title_expander</span></a><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">Preprocessor::new_loop_macro</span><span class="plain-syntax">(</span><span class="identifier-syntax">ML</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"sections"</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-rgs.html#SP8" class="function-link"><span class="function-syntax">Registries::sections_expander</span></a><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">Preprocessor::new_loop_macro</span><span class="plain-syntax">(</span><span class="identifier-syntax">ML</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"subsections"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"in: SECTION"</span><span class="plain-syntax">,</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="2-rgs.html#SP9" class="function-link"><span class="function-syntax">Registries::subsections_expander</span></a><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">Preprocessor::new_loop_macro</span><span class="plain-syntax">(</span><span class="identifier-syntax">ML</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"resources"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"in: SECTION"</span><span class="plain-syntax">,</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="2-rgs.html#SP10" class="function-link"><span class="function-syntax">Registries::resources_expander</span></a><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">Preprocessor::new_loop_macro</span><span class="plain-syntax">(</span><span class="identifier-syntax">ML</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"if-forum-thread"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"for: ID"</span><span class="plain-syntax">,</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="2-rgs.html#SP18" class="function-link"><span class="function-syntax">Registries::if_forum_thread_expander</span></a><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="2-rgs.html#SP5">§5</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b><span class="extract"><span class="extract-syntax">{include file:I}</span></span> splices in the file <span class="extract"><span class="extract-syntax">R/source/include/I</span></span>, unmodified.
|
||||||
|
It can contain any textual material, and even braces and backslashes pass
|
||||||
|
through exactly as written.
|
||||||
|
</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">Registries::include_expander</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">Registries::include_expander</span></span>:<br/><a href="2-rgs.html#SP5_1">§5.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</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">parameter_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_loop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">loop</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">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_inbuild_registry</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">specifics</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">leafname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[0];</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prototype</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">location</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"source"</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="string-syntax">"include"</span><span class="plain-syntax">), </span><span class="identifier-syntax">leafname</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">prototype</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"can't open include file"</span><span class="plain-syntax">,</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><a href="2-rgs.html#SP6" class="function-link"><span class="function-syntax">Registries::scan_line</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">PPS</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">Registries::scan_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">X</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">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">dest</span><span class="plain-syntax">, </span><span class="string-syntax">"%S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. </b><span class="extract"><span class="extract-syntax">{process file:I}</span></span> also splices in the file <span class="extract"><span class="extract-syntax">R/source/include/I</span></span>, but runs
|
||||||
|
it through the preprocessor first. This means any macros it contains will be
|
||||||
|
expanded, and it has to comply with the syntax rules on use of braces and
|
||||||
|
backslash.
|
||||||
|
</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">Registries::process_expander</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">Registries::process_expander</span></span>:<br/><a href="2-rgs.html#SP5_1">§5.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</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">parameter_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_loop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">loop</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">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_inbuild_registry</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">specifics</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">leafname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[0];</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prototype</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">location</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"source"</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="string-syntax">"include"</span><span class="plain-syntax">), </span><span class="identifier-syntax">leafname</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">prototype</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"can't open include file"</span><span class="plain-syntax">,</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">Preprocessor::scan_line</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">PPS</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. </b><span class="extract"><span class="extract-syntax">{sections}</span></span> ... <span class="extract"><span class="extract-syntax">{end-sections}</span></span> is a loop construct, which loops over each
|
||||||
|
section of the registry's roster file. The loop variable <span class="extract"><span class="extract-syntax">{SECTIONID}</span></span> holds
|
||||||
|
the ID text for the section; right now, that's just <span class="extract"><span class="extract-syntax">0</span></span>, <span class="extract"><span class="extract-syntax">1</span></span>, <span class="extract"><span class="extract-syntax">2</span></span>, ...
|
||||||
|
</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">Registries::sections_expander</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">Registries::sections_expander</span></span>:<br/><a href="2-rgs.html#SP5_1">§5.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</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">parameter_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_loop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">loop</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">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_inbuild_registry</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">specifics</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Preprocessor::set_loop_var_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">loop</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"SECTIONID"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sections</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">roster</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"sections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sections</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">"could not find roster sections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</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">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="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">sections</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_list</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">sid</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">sid</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</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">Preprocessor::add_loop_iteration</span><span class="plain-syntax">(</span><span class="identifier-syntax">loop</span><span class="plain-syntax">, </span><span class="identifier-syntax">sid</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. </b><span class="extract"><span class="extract-syntax">{subsections in: SID}</span></span> ... <span class="extract"><span class="extract-syntax">{end-subsections}</span></span> loops similarly over all
|
||||||
|
subsections in the section with id <span class="extract"><span class="extract-syntax">SID</span></span>. The loop variable is <span class="extract"><span class="extract-syntax">{SUBSECTIONID}</span></span>.
|
||||||
|
This also now counts up from 0 (but textually: all preprocessor variables are
|
||||||
|
text), but note that this SSID is unique in the registry: i.e., it doesn't go back
|
||||||
|
to <span class="extract"><span class="extract-syntax">0</span></span> at the start of each 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">Registries::subsections_expander</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">Registries::subsections_expander</span></span>:<br/><a href="2-rgs.html#SP5_1">§5.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</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">parameter_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_loop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">loop</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="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">in</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[0];</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_inbuild_registry</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">specifics</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Preprocessor::set_loop_var_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">loop</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"SUBSECTIONID"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sections</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">roster</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"sections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sections</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">"could not find roster sections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</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">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="identifier-syntax">j</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">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">sections</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_list</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">sid</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">sid</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</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">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subsections</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"subsections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">subsections</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">"could not find roster subsections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</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">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">subsections</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_list</span><span 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">sid</span><span class="plain-syntax">, </span><span class="identifier-syntax">in</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">ssid</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">ssid</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</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">Preprocessor::add_loop_iteration</span><span class="plain-syntax">(</span><span class="identifier-syntax">loop</span><span class="plain-syntax">, </span><span class="identifier-syntax">ssid</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">j</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">sid</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. </b><span class="extract"><span class="extract-syntax">{resources in: SSID}</span></span> ... <span class="extract"><span class="extract-syntax">{end-resources}</span></span> loops similarly over all
|
||||||
|
resources in the subsection with id <span class="extract"><span class="extract-syntax">SSID</span></span>, or over absolutely all resources
|
||||||
|
if the id is given as <span class="extract"><span class="extract-syntax">ALL</span></span>. The loop variable is <span class="extract"><span class="extract-syntax">{ID}</span></span>.
|
||||||
|
</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">Registries::resources_expander</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">Registries::resources_expander</span></span>:<br/><a href="2-rgs.html#SP5_1">§5.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</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">parameter_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_loop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">loop</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="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">in</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[0];</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_inbuild_registry</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">specifics</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Preprocessor::set_loop_var_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">loop</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"ID"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sections</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">roster</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"sections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sections</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">"could not find roster sections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">j</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">k</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">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">sections</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_list</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subsections</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"subsections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">subsections</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">"could not find roster subsections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</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">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">subsections</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_list</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">ssid</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">ssid</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</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">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">holdings</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"holdings"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">holdings</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">"could not find roster holdings"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">G</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">G</span><span class="plain-syntax">, </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">holdings</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_list</span><span 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">in</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"ALL"</span><span class="plain-syntax">)) || (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">ssid</span><span class="plain-syntax">, </span><span class="identifier-syntax">in</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">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">k</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Preprocessor::add_loop_iteration</span><span class="plain-syntax">(</span><span class="identifier-syntax">loop</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax">++;</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">ssid</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="SP11" class="paragraph-anchor"></a><b>§11. </b>We now have a run of macros which give details of the resource <span class="extract"><span class="extract-syntax">ID</span></span>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="commentary">First, <span class="extract"><span class="extract-syntax">{section of: ID}</span></span> produces the SID of its 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">Registries::section_expander</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">Registries::section_expander</span></span>:<br/><a href="2-rgs.html#SP5_1">§5.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</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">parameter_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_loop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">loop</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">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_inbuild_registry</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">specifics</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">of</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[0];</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">section</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">res</span><span class="plain-syntax"> = </span><a href="2-rgs.html#SP24" class="function-link"><span class="function-syntax">Registries::resource_from_textual_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">of</span><span class="plain-syntax">, </span><span class="identifier-syntax">section</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">res</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">dest</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">section</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">section</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>§12. </b><span class="extract"><span class="extract-syntax">{subsection of: ID}</span></span> produces the SSID of its subsection.
|
||||||
|
</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">Registries::subsection_expander</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">Registries::subsection_expander</span></span>:<br/><a href="2-rgs.html#SP5_1">§5.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</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">parameter_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_loop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">loop</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">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_inbuild_registry</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">specifics</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">of</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[0];</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">subsection</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">res</span><span class="plain-syntax"> = </span><a href="2-rgs.html#SP24" class="function-link"><span class="function-syntax">Registries::resource_from_textual_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">of</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">subsection</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">res</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">dest</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">subsection</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">subsection</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>§13. </b><span class="extract"><span class="extract-syntax">{author of: ID escape: ESC}</span></span> produces the author's name, optionally escaped
|
||||||
|
with the system below.
|
||||||
|
</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">Registries::author_expander</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">Registries::author_expander</span></span>:<br/><a href="2-rgs.html#SP5_1">§5.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</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">parameter_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_loop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">loop</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">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_inbuild_registry</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">specifics</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">of</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[0];</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">escape</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[1];</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">res</span><span class="plain-syntax"> = </span><a href="2-rgs.html#SP24" class="function-link"><span class="function-syntax">Registries::resource_from_textual_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">of</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="reserved-syntax">if</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">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">author</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"author"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">author</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">"could not find author"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="2-rgs.html#SP23" class="function-link"><span class="function-syntax">Registries::write_escaped</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">dest</span><span class="plain-syntax">, </span><span class="identifier-syntax">author</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">, </span><span class="identifier-syntax">escape</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>§14. </b><span class="extract"><span class="extract-syntax">{title of: ID escape: ESC}</span></span> produces the title, optionally escaped with the
|
||||||
|
system below.
|
||||||
|
</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">Registries::title_expander</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">Registries::title_expander</span></span>:<br/><a href="2-rgs.html#SP5_1">§5.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</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">parameter_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_loop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">loop</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">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_inbuild_registry</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">specifics</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">of</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[0];</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">escape</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[1];</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">res</span><span class="plain-syntax"> = </span><a href="2-rgs.html#SP24" class="function-link"><span class="function-syntax">Registries::resource_from_textual_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">of</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="reserved-syntax">if</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">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">title</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-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">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"could not find title"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="2-rgs.html#SP23" class="function-link"><span class="function-syntax">Registries::write_escaped</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">dest</span><span class="plain-syntax">, </span><span class="identifier-syntax">title</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">, </span><span class="identifier-syntax">escape</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>§15. </b><span class="extract"><span class="extract-syntax">{version of: ID escape: ESC}</span></span> produces the version, optionally escaped with the
|
||||||
|
system below.
|
||||||
|
</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">Registries::version_expander</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">Registries::version_expander</span></span>:<br/><a href="2-rgs.html#SP5_1">§5.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</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">parameter_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_loop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">loop</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">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_inbuild_registry</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">specifics</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">of</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[0];</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">escape</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[1];</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">res</span><span class="plain-syntax"> = </span><a href="2-rgs.html#SP24" class="function-link"><span class="function-syntax">Registries::resource_from_textual_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">of</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="reserved-syntax">if</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">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">version</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-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">version</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">"could not find version"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="2-rgs.html#SP23" class="function-link"><span class="function-syntax">Registries::write_escaped</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">dest</span><span class="plain-syntax">, </span><span class="identifier-syntax">version</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">, </span><span class="identifier-syntax">escape</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>§16. </b><span class="extract"><span class="extract-syntax">{summary of: ID escape: ESC}</span></span> produces the summary, optionally escaped with the
|
||||||
|
system below.
|
||||||
|
</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">Registries::summary_expander</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">Registries::summary_expander</span></span>:<br/><a href="2-rgs.html#SP5_1">§5.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</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">parameter_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_loop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">loop</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">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_inbuild_registry</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">specifics</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">of</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[0];</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">escape</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[1];</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">res</span><span class="plain-syntax"> = </span><a href="2-rgs.html#SP24" class="function-link"><span class="function-syntax">Registries::resource_from_textual_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">of</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="reserved-syntax">if</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">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">summary</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"summary"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">summary</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">"could not find summary"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="2-rgs.html#SP23" class="function-link"><span class="function-syntax">Registries::write_escaped</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">dest</span><span class="plain-syntax">, </span><span class="identifier-syntax">summary</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">, </span><span class="identifier-syntax">escape</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>§17. </b><span class="extract"><span class="extract-syntax">{thread of: ID}</span></span> produces the forum thread number, if it exists, and prints
|
||||||
|
nothing if it does not.
|
||||||
|
</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">Registries::thread_expander</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">Registries::thread_expander</span></span>:<br/><a href="2-rgs.html#SP5_1">§5.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</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">parameter_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_loop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">loop</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">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_inbuild_registry</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">specifics</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">of</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[0];</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">res</span><span class="plain-syntax"> = </span><a href="2-rgs.html#SP24" class="function-link"><span class="function-syntax">Registries::resource_from_textual_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">of</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="reserved-syntax">if</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">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">thread</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"forum-thread"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">thread</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">dest</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">thread</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_integer</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>§18. </b><span class="extract"><span class="extract-syntax">{if-forum-thread for: ID}</span></span> ... <span class="extract"><span class="extract-syntax">{end-if-forum-thread}</span></span> checks whether the
|
||||||
|
resource has a thread number, and if so, expands the material <span class="extract"><span class="extract-syntax">...</span></span>. This is
|
||||||
|
crudely done as either a 0- or 1-term loop.
|
||||||
|
</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">Registries::if_forum_thread_expander</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">Registries::if_forum_thread_expander</span></span>:<br/><a href="2-rgs.html#SP5_1">§5.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</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">parameter_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_loop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">loop</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="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">of_id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[0];</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_inbuild_registry</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">specifics</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Preprocessor::set_loop_var_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">loop</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"ID"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sections</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">roster</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"sections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sections</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">"could not find roster sections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</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">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">sections</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_list</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subsections</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"subsections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">subsections</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">"could not find roster subsections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</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">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">subsections</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_list</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">holdings</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"holdings"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">holdings</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">"could not find roster holdings"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">G</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">G</span><span class="plain-syntax">, </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">holdings</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_list</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">id</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">id</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">k</span><span class="plain-syntax">++);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">of_id</span><span class="plain-syntax">)) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">thread</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><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">"forum-thread"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">thread</span><span class="plain-syntax">) </span><span class="identifier-syntax">Preprocessor::add_loop_iteration</span><span class="plain-syntax">(</span><span class="identifier-syntax">loop</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</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">id</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="SP19" class="paragraph-anchor"></a><b>§19. </b><span class="extract"><span class="extract-syntax">{section-mark of: SID}</span></span> produces the "section mark" of the 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">Registries::section_mark_expander</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">Registries::section_mark_expander</span></span>:<br/><a href="2-rgs.html#SP5_1">§5.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</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">parameter_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_loop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">loop</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">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_inbuild_registry</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">specifics</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">of</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[0];</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">mark</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">section</span><span class="plain-syntax"> = </span><a href="2-rgs.html#SP25" class="function-link"><span class="function-syntax">Registries::section_from_textual_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">of</span><span class="plain-syntax">, </span><span class="identifier-syntax">mark</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">section</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">dest</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">mark</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">mark</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>§20. </b><span class="extract"><span class="extract-syntax">{section-title of: SID}</span></span> produces the title of the 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">Registries::section_title_expander</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">Registries::section_title_expander</span></span>:<br/><a href="2-rgs.html#SP5_1">§5.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</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">parameter_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_loop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">loop</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">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_inbuild_registry</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">specifics</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">of</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[0];</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">section</span><span class="plain-syntax"> = </span><a href="2-rgs.html#SP25" class="function-link"><span class="function-syntax">Registries::section_from_textual_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">of</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">section</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">title</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">section</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-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">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"could not find 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">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">dest</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">title</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>§21. </b><span class="extract"><span class="extract-syntax">{subsection-mark of: SID}</span></span> produces the "subsection mark" of the subsection.
|
||||||
|
</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">Registries::subsection_mark_expander</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">Registries::subsection_mark_expander</span></span>:<br/><a href="2-rgs.html#SP5_1">§5.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</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">parameter_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_loop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">loop</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">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_inbuild_registry</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">specifics</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">of</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[0];</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">mark</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subsection</span><span class="plain-syntax"> = </span><a href="2-rgs.html#SP26" class="function-link"><span class="function-syntax">Registries::subsection_from_textual_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">of</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">mark</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">subsection</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">dest</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">mark</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">mark</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP22" class="paragraph-anchor"></a><b>§22. </b><span class="extract"><span class="extract-syntax">{subsection-title of: SID}</span></span> produces the title of the subsection.
|
||||||
|
</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">Registries::subsection_title_expander</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">Registries::subsection_title_expander</span></span>:<br/><a href="2-rgs.html#SP5_1">§5.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</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">parameter_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_loop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">loop</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">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_inbuild_registry</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">specifics</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">of</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[0];</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subsection</span><span class="plain-syntax"> = </span><a href="2-rgs.html#SP26" class="function-link"><span class="function-syntax">Registries::subsection_from_textual_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">of</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">subsection</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">title</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">subsection</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-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">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"could not find 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">PPS</span><span class="plain-syntax">-></span><span class="identifier-syntax">dest</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">title</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP23" class="paragraph-anchor"></a><b>§23. Escapology. </b><span class="extract"><span class="extract-syntax">quotes</span></span> escapes single quotation marks by placing a backslash before them,
|
||||||
|
as is necessary in JavaScript string literals.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="commentary"><span class="extract"><span class="extract-syntax">spaces</span></span> escapes spaces as <span class="extract"><span class="extract-syntax">%20</span></span>, as is necessary in URLs.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="commentary"><span class="extract"><span class="extract-syntax">both</span></span> does both; <span class="extract"><span class="extract-syntax">neither</span></span> does neither.
|
||||||
|
</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">Registries::write_escaped</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">Registries::write_escaped</span></span>:<br/><a href="2-rgs.html#SP13">§13</a>, <a href="2-rgs.html#SP14">§14</a>, <a href="2-rgs.html#SP15">§15</a>, <a href="2-rgs.html#SP16">§16</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="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">escape</span><span 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">escape</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"quotes"</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">text</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</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span 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">PUT</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">PUT</span><span class="plain-syntax">(</span><span class="character-syntax">'\''</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">escape</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"spaces"</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">text</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</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span 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</span><span class="plain-syntax">(</span><span class="string-syntax">"%%20"</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</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="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">escape</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"both"</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">text</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</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span 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">PUT</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">PUT</span><span class="plain-syntax">(</span><span class="character-syntax">'\''</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">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"> == </span><span class="character-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">"%%20"</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</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="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">escape</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"neither"</span><span class="plain-syntax">)) || (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">escape</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">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">text</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</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">"error: no such escape as '%S'\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">escape</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP24" class="paragraph-anchor"></a><b>§24. Looking up by textual ID. </b>Given a textual resource id <span class="extract"><span class="extract-syntax">id</span></span>, return the JSON object for it, or else
|
||||||
|
print an error and return <span class="extract"><span class="extract-syntax">NULL</span></span>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="commentary">On success, the SID of its section is written to <span class="extract"><span class="extract-syntax">sectionid</span></span>, and the SSID
|
||||||
|
of its subsection to <span class="extract"><span class="extract-syntax">subsectionid</span></span>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="function-syntax">Registries::resource_from_textual_id</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">Registries::resource_from_textual_id</span></span>:<br/><a href="2-rgs.html#SP11">§11</a>, <a href="2-rgs.html#SP12">§12</a>, <a href="2-rgs.html#SP13">§13</a>, <a href="2-rgs.html#SP14">§14</a>, <a href="2-rgs.html#SP15">§15</a>, <a href="2-rgs.html#SP16">§16</a>, <a href="2-rgs.html#SP17">§17</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sectionid</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subsectionid</span><span 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="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">roster</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 registry"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sections</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">roster</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"sections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sections</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">"could not find roster sections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</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">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="identifier-syntax">j</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">k</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">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">sections</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_list</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subsections</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"subsections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">subsections</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">"could not find roster subsections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</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">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">subsections</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_list</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">holdings</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"holdings"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">holdings</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">"could not find roster holdings"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">G</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">G</span><span class="plain-syntax">, </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">holdings</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_list</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">match</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">this_id</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">this_id</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">k</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">this_id</span><span class="plain-syntax">)) </span><span class="identifier-syntax">match</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">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">this_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">match</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">sectionid</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</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">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">subsectionid</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">G</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax">++;</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">j</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="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">"error: no such resource ID as '%S'\n"</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">NULL</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP25" class="paragraph-anchor"></a><b>§25. </b>Similarly for sections, with a <span class="extract"><span class="extract-syntax">SID</span></span>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="commentary">The "mark" for a section is 1, 2, 3, ...
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="function-syntax">Registries::section_from_textual_id</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">Registries::section_from_textual_id</span></span>:<br/><a href="2-rgs.html#SP19">§19</a>, <a href="2-rgs.html#SP20">§20</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sid</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">mark</span><span 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="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">roster</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 registry"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sections</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">roster</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"sections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sections</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">"could not find roster sections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</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">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="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">sections</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_list</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">match</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">this_sid</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">this_sid</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</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::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">sid</span><span class="plain-syntax">, </span><span class="identifier-syntax">this_sid</span><span class="plain-syntax">)) </span><span class="identifier-syntax">match</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">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">this_sid</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">match</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">mark</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</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">E</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="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">"error: no such section ID as '%S'\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">sid</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="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP26" class="paragraph-anchor"></a><b>§26. </b>And subsections, with a <span class="extract"><span class="extract-syntax">SSID</span></span>:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="commentary">The "mark" for a subsection is 1.1, 1.2, 1.3, ..., 2.1, 2.2, ...
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="function-syntax">Registries::subsection_from_textual_id</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">Registries::subsection_from_textual_id</span></span>:<br/><a href="2-rgs.html#SP21">§21</a>, <a href="2-rgs.html#SP22">§22</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ssid</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">mark</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">submark</span><span 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="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">roster</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 registry"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sections</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">roster</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"sections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sections</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">"could not find roster sections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</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">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="identifier-syntax">j</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">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">sections</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_list</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subsections</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"subsections"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">subsections</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">"could not find roster subsections"</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">x</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">JSON_value</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">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">subsections</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_list</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">match</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">this_ssid</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">this_ssid</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">ssid</span><span class="plain-syntax">, </span><span class="identifier-syntax">this_ssid</span><span class="plain-syntax">)) </span><span class="identifier-syntax">match</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">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">this_ssid</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">match</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">mark</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</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">submark</span><span class="plain-syntax">, </span><span class="string-syntax">"%d.%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">+1, </span><span class="identifier-syntax">x</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">F</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">j</span><span class="plain-syntax">++, </span><span class="identifier-syntax">x</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="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">"error: no such subsection ID as '%S'\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ssid</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="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<nav role="progress"><div class="progresscontainer">
|
||||||
|
<ul class="progressbar"><li class="progressprev"><a href="2-nst.html">❮</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="progresssection"><a href="2-wrk.html">wrk</a></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="progresscurrent">rgs</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-jm.html">❯</a></li></ul></div>
|
||||||
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
|
@ -284,7 +284,7 @@ imposes no version constraints.
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="2-ce.html">❮</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="progresssection"><a href="2-wrk.html">wrk</a></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="progresscurrent">rqr</li><li class="progresssection"><a href="2-nst.html">nst</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-nst.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="2-ce.html">❮</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="progresssection"><a href="2-wrk.html">wrk</a></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="progresscurrent">rqr</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-nst.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -337,7 +337,7 @@ each extension's page is generated from its <span class="extract"><span class="e
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>The function Works::escape_apostrophes appears nowhere else.</li></ul>
|
<ul class="endnotetexts"><li>The function Works::escape_apostrophes appears nowhere else.</li></ul>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="2-gnr.html">❮</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-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">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="2-gnr.html">❮</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">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -115,6 +115,11 @@
|
||||||
<spon class="sectiontitle">Nests</span></a> -
|
<spon class="sectiontitle">Nests</span></a> -
|
||||||
<span class="sectionpurpose">Nests are repositories of Inform-related resources.</span></p>
|
<span class="sectionpurpose">Nests are repositories of Inform-related resources.</span></p>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<p class="sectionentry"><a href="2-rgs.html">
|
||||||
|
<spon class="sectiontitle">Registries</span></a> -
|
||||||
|
<span class="sectionpurpose">Registries are nests provided with metadata and intended to be presented as an online source from which Inform resources can be downloaded.</span></p>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p class="sectionentry"><a href="2-jm.html">
|
<p class="sectionentry"><a href="2-jm.html">
|
||||||
<spon class="sectiontitle">JSON Metadata</span></a> -
|
<spon class="sectiontitle">JSON Metadata</span></a> -
|
||||||
|
|
|
@ -13,6 +13,7 @@ int inbuild_task = INSPECT_TTASK;
|
||||||
pathname *path_to_tools = NULL;
|
pathname *path_to_tools = NULL;
|
||||||
int dry_run_mode = FALSE, build_trace_mode = FALSE;
|
int dry_run_mode = FALSE, build_trace_mode = FALSE;
|
||||||
inbuild_nest *destination_nest = NULL;
|
inbuild_nest *destination_nest = NULL;
|
||||||
|
inbuild_registry *selected_registry = NULL;
|
||||||
text_stream *filter_text = NULL;
|
text_stream *filter_text = NULL;
|
||||||
|
|
||||||
@h Main routine.
|
@h Main routine.
|
||||||
|
@ -311,6 +312,8 @@ other options to the selection defined here.
|
||||||
@e COPY_TO_CLSW
|
@e COPY_TO_CLSW
|
||||||
@e SYNC_TO_CLSW
|
@e SYNC_TO_CLSW
|
||||||
@e VERSIONS_IN_FILENAMES_CLSW
|
@e VERSIONS_IN_FILENAMES_CLSW
|
||||||
|
@e VERIFY_REGISTRY_CLSW
|
||||||
|
@e BUILD_REGISTRY_CLSW
|
||||||
|
|
||||||
@<Read the command line@> =
|
@<Read the command line@> =
|
||||||
CommandLine::declare_heading(
|
CommandLine::declare_heading(
|
||||||
|
@ -356,6 +359,10 @@ other options to the selection defined here.
|
||||||
L"apply to all works in nest(s) matching requirement X");
|
L"apply to all works in nest(s) matching requirement X");
|
||||||
CommandLine::declare_switch(CONTENTS_OF_CLSW, L"contents-of", 2,
|
CommandLine::declare_switch(CONTENTS_OF_CLSW, L"contents-of", 2,
|
||||||
L"apply to all targets in the directory X");
|
L"apply to all targets in the directory X");
|
||||||
|
CommandLine::declare_switch(VERIFY_REGISTRY_CLSW, L"verify-registry", 2,
|
||||||
|
L"verify roster.json metadata of registry in the directory X");
|
||||||
|
CommandLine::declare_switch(BUILD_REGISTRY_CLSW, L"build-registry", 2,
|
||||||
|
L"construct HTML menu pages for registry in the directory X");
|
||||||
Supervisor::declare_options();
|
Supervisor::declare_options();
|
||||||
|
|
||||||
CommandLine::read(argc, argv, NULL, &Main::option, &Main::bareword);
|
CommandLine::read(argc, argv, NULL, &Main::option, &Main::bareword);
|
||||||
|
@ -396,6 +403,13 @@ void Main::option(int id, int val, text_stream *arg, void *state) {
|
||||||
break;
|
break;
|
||||||
case VERSIONS_IN_FILENAMES_CLSW:
|
case VERSIONS_IN_FILENAMES_CLSW:
|
||||||
Editions::set_canonical_leaves_have_versions(val); break;
|
Editions::set_canonical_leaves_have_versions(val); break;
|
||||||
|
case VERIFY_REGISTRY_CLSW:
|
||||||
|
case BUILD_REGISTRY_CLSW:
|
||||||
|
selected_registry = Registries::new(Pathnames::from_text(arg));
|
||||||
|
if (Registries::read_roster(selected_registry) == FALSE) exit(1);
|
||||||
|
if (id == BUILD_REGISTRY_CLSW)
|
||||||
|
Registries::build(selected_registry);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
Supervisor::option(id, val, arg, state);
|
Supervisor::option(id, val, arg, state);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@ Manual
|
||||||
A Guide to Kits
|
A Guide to Kits
|
||||||
A Guide to Language Bundles
|
A Guide to Language Bundles
|
||||||
A Guide to Project Metadata
|
A Guide to Project Metadata
|
||||||
|
A Guide to Registries
|
||||||
Reference Card
|
Reference Card
|
||||||
|
|
||||||
Chapter 1: Outside of inform7
|
Chapter 1: Outside of inform7
|
||||||
|
|
|
@ -8,6 +8,7 @@ usage: inbuild [-TASK] TARGET1 TARGET2 ...
|
||||||
-build-locate show file paths of all the extensions, kits and so on needed to build
|
-build-locate show file paths of all the extensions, kits and so on needed to build
|
||||||
-build-missing show the extensions, kits and so on which are needed to build but missing
|
-build-missing show the extensions, kits and so on which are needed to build but missing
|
||||||
-build-needs show all the extensions, kits and so on needed to build
|
-build-needs show all the extensions, kits and so on needed to build
|
||||||
|
-build-registry X construct HTML menu pages for registry in the directory X
|
||||||
-build-trace show verbose reasoning during -build (default is -no-build-trace)
|
-build-trace show verbose reasoning during -build (default is -no-build-trace)
|
||||||
-contents-of X apply to all targets in the directory X
|
-contents-of X apply to all targets in the directory X
|
||||||
-copy-to X copy target(s) to nest X
|
-copy-to X copy target(s) to nest X
|
||||||
|
@ -21,6 +22,7 @@ usage: inbuild [-TASK] TARGET1 TARGET2 ...
|
||||||
-use-locate show file paths of all the extensions, kits and so on needed to use
|
-use-locate show file paths of all the extensions, kits and so on needed to use
|
||||||
-use-missing show the extensions, kits and so on which are needed to use but missing
|
-use-missing show the extensions, kits and so on which are needed to use but missing
|
||||||
-use-needs show all the extensions, kits and so on needed to use
|
-use-needs show all the extensions, kits and so on needed to use
|
||||||
|
-verify-registry X verify roster.json metadata of registry in the directory X
|
||||||
-no-versions-in-filenames don't append _v number to destination filenames on -copy-to or -sync-to (default is -versions-in-filenames)
|
-no-versions-in-filenames don't append _v number to destination filenames on -copy-to or -sync-to (default is -versions-in-filenames)
|
||||||
|
|
||||||
for translating Inform source text to Inter:
|
for translating Inform source text to Inter:
|
||||||
|
|
14
inbuild/Manual/A Guide to Registries.w
Normal file
14
inbuild/Manual/A Guide to Registries.w
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
A Guide to Registries.
|
||||||
|
|
||||||
|
Provisional documentation on how to scan and build registries of Inform resources.
|
||||||
|
|
||||||
|
@h Registries.
|
||||||
|
A "registry" is a collection of Inform resources gathered together for others
|
||||||
|
to use. The Public Library presented in the Inform apps is a registry, for
|
||||||
|
example, but the idea is being generalised in inbuild with a view to future
|
||||||
|
developments.
|
||||||
|
|
||||||
|
This page is a place-holder for now: see //supervisor: Registries// for
|
||||||
|
very slightly more.
|
||||||
|
|
||||||
|
The PL presented as a registry can be seen at //this repository -> https://github.com/ganelson/inform-public-library//.
|
|
@ -27,6 +27,7 @@ which use this module:
|
||||||
@e inbuild_edition_CLASS
|
@e inbuild_edition_CLASS
|
||||||
@e inbuild_genre_CLASS
|
@e inbuild_genre_CLASS
|
||||||
@e inbuild_nest_CLASS
|
@e inbuild_nest_CLASS
|
||||||
|
@e inbuild_registry_CLASS
|
||||||
@e inbuild_requirement_CLASS
|
@e inbuild_requirement_CLASS
|
||||||
@e inbuild_search_result_CLASS
|
@e inbuild_search_result_CLASS
|
||||||
@e inbuild_work_CLASS
|
@e inbuild_work_CLASS
|
||||||
|
@ -58,6 +59,7 @@ DECLARE_CLASS(inbuild_copy)
|
||||||
DECLARE_CLASS(inbuild_edition)
|
DECLARE_CLASS(inbuild_edition)
|
||||||
DECLARE_CLASS(inbuild_genre)
|
DECLARE_CLASS(inbuild_genre)
|
||||||
DECLARE_CLASS(inbuild_nest)
|
DECLARE_CLASS(inbuild_nest)
|
||||||
|
DECLARE_CLASS(inbuild_registry)
|
||||||
DECLARE_CLASS(inbuild_requirement)
|
DECLARE_CLASS(inbuild_requirement)
|
||||||
DECLARE_CLASS(inbuild_search_result)
|
DECLARE_CLASS(inbuild_search_result)
|
||||||
DECLARE_CLASS(inbuild_work)
|
DECLARE_CLASS(inbuild_work)
|
||||||
|
|
|
@ -237,7 +237,7 @@ dictionary *JSON_resource_metadata_requirements = NULL;
|
||||||
|
|
||||||
JSON_requirement *JSONMetadata::requirements(void) {
|
JSON_requirement *JSONMetadata::requirements(void) {
|
||||||
if (JSON_resource_metadata_requirements == NULL) {
|
if (JSON_resource_metadata_requirements == NULL) {
|
||||||
filename *F = InstalledFiles::filename(JSON_REQUIREMENTS_IRES);
|
filename *F = InstalledFiles::filename(RESOURCE_JSON_REQS_IRES);
|
||||||
JSON_resource_metadata_requirements = JSON::read_requirements_file(NULL, F);
|
JSON_resource_metadata_requirements = JSON::read_requirements_file(NULL, F);
|
||||||
}
|
}
|
||||||
JSON_requirement *req =
|
JSON_requirement *req =
|
||||||
|
|
641
inbuild/supervisor-module/Chapter 2/Registries.w
Normal file
641
inbuild/supervisor-module/Chapter 2/Registries.w
Normal file
|
@ -0,0 +1,641 @@
|
||||||
|
[Registries::] Registries.
|
||||||
|
|
||||||
|
Registries are nests provided with metadata and intended to be presented as
|
||||||
|
an online source from which Inform resources can be downloaded.
|
||||||
|
|
||||||
|
@h Creation.
|
||||||
|
To "create" a registry here does not mean actually altering the file system, for
|
||||||
|
example by making a directory: registries here are merely notes in memory of
|
||||||
|
positions in the file system hierarchy which may or may not exist.
|
||||||
|
|
||||||
|
=
|
||||||
|
typedef struct inbuild_registry {
|
||||||
|
struct pathname *location;
|
||||||
|
struct inbuild_nest *nest;
|
||||||
|
struct JSON_value *roster;
|
||||||
|
CLASS_DEFINITION
|
||||||
|
} inbuild_registry;
|
||||||
|
|
||||||
|
@ =
|
||||||
|
inbuild_registry *Registries::new(pathname *P) {
|
||||||
|
inbuild_registry *N = CREATE(inbuild_registry);
|
||||||
|
N->location = P;
|
||||||
|
N->nest = Nests::new(Pathnames::down(P, I"payloads"));
|
||||||
|
N->roster = NULL;
|
||||||
|
return N;
|
||||||
|
}
|
||||||
|
|
||||||
|
@h The roster.
|
||||||
|
This is a JSON file called |roster.json|, whose schema must match the one specified
|
||||||
|
by the file |registry-metadata.jsonr| in the standard Inform distribution.
|
||||||
|
|
||||||
|
The following silently returns |TRUE| if it does, or prints errors and returns
|
||||||
|
|FALSE| if not (or if it doesn't exist).
|
||||||
|
|
||||||
|
=
|
||||||
|
int Registries::read_roster(inbuild_registry *R) {
|
||||||
|
if (R == NULL) internal_error("no registry");
|
||||||
|
R->roster = NULL;
|
||||||
|
filename *F = Filenames::in(R->location, I"roster.json");
|
||||||
|
if (TextFiles::exists(F) == FALSE) {
|
||||||
|
WRITE_TO(STDERR, "%f: roster file does not exist\n", F);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
TEMPORARY_TEXT(contents)
|
||||||
|
TextFiles::read(F, FALSE, "unable to read file of JSON metadata", TRUE,
|
||||||
|
&JSONMetadata::read_metadata_file_helper, NULL, contents);
|
||||||
|
text_file_position tfp = TextFiles::at(F, 1);
|
||||||
|
JSON_value *obj = JSON::decode(contents, &tfp);
|
||||||
|
DISCARD_TEXT(contents)
|
||||||
|
if ((obj) && (obj->JSON_type == ERROR_JSONTYPE)) {
|
||||||
|
WRITE_TO(STDERR, "%f: JSON syntax error: %S\n", F, obj->if_error);
|
||||||
|
return FALSE;
|
||||||
|
} else {
|
||||||
|
JSON_requirement *req = Registries::requirements();
|
||||||
|
linked_list *validation_errors = NEW_LINKED_LIST(text_stream);
|
||||||
|
if (JSON::validate(obj, req, validation_errors) == FALSE) {
|
||||||
|
text_stream *err;
|
||||||
|
LOOP_OVER_LINKED_LIST(err, text_stream, validation_errors) {
|
||||||
|
WRITE_TO(STDERR, "%f: metadata did not validate: '%S'\n", F, err);
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
R->roster = obj;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ The following schema validates the metadata for a registry, and is cached
|
||||||
|
so that it only needs to load once.
|
||||||
|
|
||||||
|
=
|
||||||
|
dictionary *JSON_registry_metadata_requirements = NULL;
|
||||||
|
|
||||||
|
JSON_requirement *Registries::requirements(void) {
|
||||||
|
if (JSON_registry_metadata_requirements == NULL) {
|
||||||
|
filename *F = InstalledFiles::filename(REGISTRY_JSON_REQS_IRES);
|
||||||
|
JSON_registry_metadata_requirements = JSON::read_requirements_file(NULL, F);
|
||||||
|
}
|
||||||
|
JSON_requirement *req =
|
||||||
|
JSON::look_up_requirements(JSON_registry_metadata_requirements, I"registry-metadata");
|
||||||
|
if (req == NULL) internal_error("JSON metadata file did not define <registry-metadata>");
|
||||||
|
return req;
|
||||||
|
}
|
||||||
|
|
||||||
|
@h Building.
|
||||||
|
To "build" a registry doesn't involve very much: just putting some indexing
|
||||||
|
files together, using the preprocessor built into //foundation//.
|
||||||
|
|
||||||
|
If the registry is |R|, we preprocess each file |R/source/X.Y| into |R/X.Y|:
|
||||||
|
|
||||||
|
=
|
||||||
|
void Registries::build(inbuild_registry *R) {
|
||||||
|
if (R == NULL) internal_error("no registry");
|
||||||
|
linked_list *ML = NEW_LINKED_LIST(preprocessor_macro);
|
||||||
|
@<Construct the list of custom macros for this sort of preprocessing@>;
|
||||||
|
pathname *S = Pathnames::down(R->location, I"source");
|
||||||
|
linked_list *L = Directories::listing(S);
|
||||||
|
text_stream *entry;
|
||||||
|
LOOP_OVER_LINKED_LIST(entry, text_stream, L) {
|
||||||
|
if (Platform::is_folder_separator(Str::get_last_char(entry)) == FALSE) {
|
||||||
|
filename *F = Filenames::in(S, entry);
|
||||||
|
TEMPORARY_TEXT(EXT)
|
||||||
|
Filenames::write_extension(EXT, F);
|
||||||
|
if (Str::len(EXT) > 0) {
|
||||||
|
filename *T = Filenames::in(R->location, Filenames::get_leafname(F));
|
||||||
|
WRITE_TO(STDOUT, "%f -> %f\n", F, T);
|
||||||
|
Preprocessor::preprocess(F, T, NULL, ML,
|
||||||
|
STORE_POINTER_inbuild_registry(R), '#', UTF8_ENC);
|
||||||
|
}
|
||||||
|
DISCARD_TEXT(EXT)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@<Construct the list of custom macros for this sort of preprocessing@> =
|
||||||
|
Preprocessor::new_macro(ML, I"include", I"file: LEAFNAME",
|
||||||
|
Registries::include_expander, NULL);
|
||||||
|
Preprocessor::new_macro(ML, I"process", I"file: LEAFNAME",
|
||||||
|
Registries::process_expander, NULL);
|
||||||
|
Preprocessor::do_not_suppress_whitespace(
|
||||||
|
Preprocessor::new_macro(ML, I"section", I"of: ID",
|
||||||
|
Registries::section_expander, NULL));
|
||||||
|
Preprocessor::do_not_suppress_whitespace(
|
||||||
|
Preprocessor::new_macro(ML, I"subsection", I"of: ID",
|
||||||
|
Registries::subsection_expander, NULL));
|
||||||
|
Preprocessor::do_not_suppress_whitespace(
|
||||||
|
Preprocessor::new_macro(ML, I"author", I"of: ID ?escape: WHICH",
|
||||||
|
Registries::author_expander, NULL));
|
||||||
|
Preprocessor::do_not_suppress_whitespace(
|
||||||
|
Preprocessor::new_macro(ML, I"title", I"of: ID ?escape: WHICH",
|
||||||
|
Registries::title_expander, NULL));
|
||||||
|
Preprocessor::do_not_suppress_whitespace(
|
||||||
|
Preprocessor::new_macro(ML, I"version", I"of: ID ?escape: WHICH",
|
||||||
|
Registries::version_expander, NULL));
|
||||||
|
Preprocessor::do_not_suppress_whitespace(
|
||||||
|
Preprocessor::new_macro(ML, I"summary", I"of: ID ?escape: WHICH",
|
||||||
|
Registries::summary_expander, NULL));
|
||||||
|
Preprocessor::do_not_suppress_whitespace(
|
||||||
|
Preprocessor::new_macro(ML, I"forum-thread", I"of: ID",
|
||||||
|
Registries::thread_expander, NULL));
|
||||||
|
Preprocessor::do_not_suppress_whitespace(
|
||||||
|
Preprocessor::new_macro(ML, I"section-mark", I"of: ID",
|
||||||
|
Registries::section_mark_expander, NULL));
|
||||||
|
Preprocessor::do_not_suppress_whitespace(
|
||||||
|
Preprocessor::new_macro(ML, I"section-title", I"of: ID",
|
||||||
|
Registries::section_title_expander, NULL));
|
||||||
|
Preprocessor::do_not_suppress_whitespace(
|
||||||
|
Preprocessor::new_macro(ML, I"subsection-mark", I"of: ID",
|
||||||
|
Registries::subsection_mark_expander, NULL));
|
||||||
|
Preprocessor::do_not_suppress_whitespace(
|
||||||
|
Preprocessor::new_macro(ML, I"subsection-title", I"of: ID",
|
||||||
|
Registries::subsection_title_expander, NULL));
|
||||||
|
Preprocessor::new_loop_macro(ML, I"sections", NULL,
|
||||||
|
Registries::sections_expander, NULL);
|
||||||
|
Preprocessor::new_loop_macro(ML, I"subsections", I"in: SECTION",
|
||||||
|
Registries::subsections_expander, NULL);
|
||||||
|
Preprocessor::new_loop_macro(ML, I"resources", I"in: SECTION",
|
||||||
|
Registries::resources_expander, NULL);
|
||||||
|
Preprocessor::new_loop_macro(ML, I"if-forum-thread", I"for: ID",
|
||||||
|
Registries::if_forum_thread_expander, NULL);
|
||||||
|
|
||||||
|
@ |{include file:I}| splices in the file |R/source/include/I|, unmodified.
|
||||||
|
It can contain any textual material, and even braces and backslashes pass
|
||||||
|
through exactly as written.
|
||||||
|
|
||||||
|
=
|
||||||
|
void Registries::include_expander(preprocessor_macro *mm, preprocessor_state *PPS,
|
||||||
|
text_stream **parameter_values, preprocessor_loop *loop, text_file_position *tfp) {
|
||||||
|
inbuild_registry *R = RETRIEVE_POINTER_inbuild_registry(PPS->specifics);
|
||||||
|
text_stream *leafname = parameter_values[0];
|
||||||
|
filename *prototype = Filenames::in(Pathnames::down(Pathnames::down(R->location, I"source"), I"include"), leafname);
|
||||||
|
TextFiles::read(prototype, FALSE, "can't open include file",
|
||||||
|
TRUE, Registries::scan_line, NULL, PPS);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Registries::scan_line(text_stream *line, text_file_position *tfp, void *X) {
|
||||||
|
preprocessor_state *PPS = (preprocessor_state *) X;
|
||||||
|
WRITE_TO(PPS->dest, "%S\n", line);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ |{process file:I}| also splices in the file |R/source/include/I|, but runs
|
||||||
|
it through the preprocessor first. This means any macros it contains will be
|
||||||
|
expanded, and it has to comply with the syntax rules on use of braces and
|
||||||
|
backslash.
|
||||||
|
|
||||||
|
=
|
||||||
|
void Registries::process_expander(preprocessor_macro *mm, preprocessor_state *PPS,
|
||||||
|
text_stream **parameter_values, preprocessor_loop *loop, text_file_position *tfp) {
|
||||||
|
inbuild_registry *R = RETRIEVE_POINTER_inbuild_registry(PPS->specifics);
|
||||||
|
text_stream *leafname = parameter_values[0];
|
||||||
|
filename *prototype = Filenames::in(Pathnames::down(Pathnames::down(R->location, I"source"), I"include"), leafname);
|
||||||
|
TextFiles::read(prototype, FALSE, "can't open include file",
|
||||||
|
TRUE, Preprocessor::scan_line, NULL, PPS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ |{sections}| ... |{end-sections}| is a loop construct, which loops over each
|
||||||
|
section of the registry's roster file. The loop variable |{SECTIONID}| holds
|
||||||
|
the ID text for the section; right now, that's just |0|, |1|, |2|, ...
|
||||||
|
|
||||||
|
=
|
||||||
|
void Registries::sections_expander(preprocessor_macro *mm, preprocessor_state *PPS,
|
||||||
|
text_stream **parameter_values, preprocessor_loop *loop, text_file_position *tfp) {
|
||||||
|
inbuild_registry *R = RETRIEVE_POINTER_inbuild_registry(PPS->specifics);
|
||||||
|
Preprocessor::set_loop_var_name(loop, I"SECTIONID");
|
||||||
|
JSON_value *sections = JSON::look_up_object(R->roster, I"sections");
|
||||||
|
if (sections == NULL) internal_error("could not find roster sections");
|
||||||
|
JSON_value *E;
|
||||||
|
int i = 0;
|
||||||
|
LOOP_OVER_LINKED_LIST(E, JSON_value, sections->if_list) {
|
||||||
|
text_stream *sid = Str::new();
|
||||||
|
WRITE_TO(sid, "%d", i++);
|
||||||
|
Preprocessor::add_loop_iteration(loop, sid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ |{subsections in: SID}| ... |{end-subsections}| loops similarly over all
|
||||||
|
subsections in the section with id |SID|. The loop variable is |{SUBSECTIONID}|.
|
||||||
|
This also now counts up from 0 (but textually: all preprocessor variables are
|
||||||
|
text), but note that this SSID is unique in the registry: i.e., it doesn't go back
|
||||||
|
to |0| at the start of each section.
|
||||||
|
|
||||||
|
=
|
||||||
|
void Registries::subsections_expander(preprocessor_macro *mm, preprocessor_state *PPS,
|
||||||
|
text_stream **parameter_values, preprocessor_loop *loop, text_file_position *tfp) {
|
||||||
|
text_stream *in = parameter_values[0];
|
||||||
|
inbuild_registry *R = RETRIEVE_POINTER_inbuild_registry(PPS->specifics);
|
||||||
|
Preprocessor::set_loop_var_name(loop, I"SUBSECTIONID");
|
||||||
|
JSON_value *sections = JSON::look_up_object(R->roster, I"sections");
|
||||||
|
if (sections == NULL) internal_error("could not find roster sections");
|
||||||
|
JSON_value *E;
|
||||||
|
int i = 0, j = 0;
|
||||||
|
LOOP_OVER_LINKED_LIST(E, JSON_value, sections->if_list) {
|
||||||
|
TEMPORARY_TEXT(sid)
|
||||||
|
WRITE_TO(sid, "%d", i++);
|
||||||
|
JSON_value *subsections = JSON::look_up_object(E, I"subsections");
|
||||||
|
if (subsections == NULL) internal_error("could not find roster subsections");
|
||||||
|
JSON_value *F;
|
||||||
|
LOOP_OVER_LINKED_LIST(F, JSON_value, subsections->if_list) {
|
||||||
|
if (Str::eq(sid, in)) {
|
||||||
|
text_stream *ssid = Str::new();
|
||||||
|
WRITE_TO(ssid, "%d", j);
|
||||||
|
Preprocessor::add_loop_iteration(loop, ssid);
|
||||||
|
}
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
DISCARD_TEXT(sid)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ |{resources in: SSID}| ... |{end-resources}| loops similarly over all
|
||||||
|
resources in the subsection with id |SSID|, or over absolutely all resources
|
||||||
|
if the id is given as |ALL|. The loop variable is |{ID}|.
|
||||||
|
|
||||||
|
=
|
||||||
|
void Registries::resources_expander(preprocessor_macro *mm, preprocessor_state *PPS,
|
||||||
|
text_stream **parameter_values, preprocessor_loop *loop, text_file_position *tfp) {
|
||||||
|
text_stream *in = parameter_values[0];
|
||||||
|
inbuild_registry *R = RETRIEVE_POINTER_inbuild_registry(PPS->specifics);
|
||||||
|
Preprocessor::set_loop_var_name(loop, I"ID");
|
||||||
|
JSON_value *sections = JSON::look_up_object(R->roster, I"sections");
|
||||||
|
if (sections == NULL) internal_error("could not find roster sections");
|
||||||
|
JSON_value *E;
|
||||||
|
int j = 0, k = 0;
|
||||||
|
LOOP_OVER_LINKED_LIST(E, JSON_value, sections->if_list) {
|
||||||
|
JSON_value *subsections = JSON::look_up_object(E, I"subsections");
|
||||||
|
if (subsections == NULL) internal_error("could not find roster subsections");
|
||||||
|
JSON_value *F;
|
||||||
|
LOOP_OVER_LINKED_LIST(F, JSON_value, subsections->if_list) {
|
||||||
|
TEMPORARY_TEXT(ssid)
|
||||||
|
WRITE_TO(ssid, "%d", j++);
|
||||||
|
JSON_value *holdings = JSON::look_up_object(F, I"holdings");
|
||||||
|
if (holdings == NULL) internal_error("could not find roster holdings");
|
||||||
|
JSON_value *G;
|
||||||
|
LOOP_OVER_LINKED_LIST(G, JSON_value, holdings->if_list) {
|
||||||
|
if ((Str::eq(in, I"ALL")) || (Str::eq(ssid, in))) {
|
||||||
|
text_stream *id = Str::new();
|
||||||
|
WRITE_TO(id, "%d", k);
|
||||||
|
Preprocessor::add_loop_iteration(loop, id);
|
||||||
|
}
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
DISCARD_TEXT(ssid)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ We now have a run of macros which give details of the resource |ID|.
|
||||||
|
|
||||||
|
First, |{section of: ID}| produces the SID of its section.
|
||||||
|
|
||||||
|
=
|
||||||
|
void Registries::section_expander(preprocessor_macro *mm, preprocessor_state *PPS,
|
||||||
|
text_stream **parameter_values, preprocessor_loop *loop, text_file_position *tfp) {
|
||||||
|
inbuild_registry *R = RETRIEVE_POINTER_inbuild_registry(PPS->specifics);
|
||||||
|
text_stream *of = parameter_values[0];
|
||||||
|
TEMPORARY_TEXT(section)
|
||||||
|
JSON_value *res = Registries::resource_from_textual_id(R, of, section, NULL);
|
||||||
|
if (res) WRITE_TO(PPS->dest, "%S", section);
|
||||||
|
DISCARD_TEXT(section)
|
||||||
|
}
|
||||||
|
|
||||||
|
@ |{subsection of: ID}| produces the SSID of its subsection.
|
||||||
|
|
||||||
|
=
|
||||||
|
void Registries::subsection_expander(preprocessor_macro *mm, preprocessor_state *PPS,
|
||||||
|
text_stream **parameter_values, preprocessor_loop *loop, text_file_position *tfp) {
|
||||||
|
inbuild_registry *R = RETRIEVE_POINTER_inbuild_registry(PPS->specifics);
|
||||||
|
text_stream *of = parameter_values[0];
|
||||||
|
TEMPORARY_TEXT(subsection)
|
||||||
|
JSON_value *res = Registries::resource_from_textual_id(R, of, NULL, subsection);
|
||||||
|
if (res) WRITE_TO(PPS->dest, "%S", subsection);
|
||||||
|
DISCARD_TEXT(subsection)
|
||||||
|
}
|
||||||
|
|
||||||
|
@ |{author of: ID escape: ESC}| produces the author's name, optionally escaped
|
||||||
|
with the system below.
|
||||||
|
|
||||||
|
=
|
||||||
|
void Registries::author_expander(preprocessor_macro *mm, preprocessor_state *PPS,
|
||||||
|
text_stream **parameter_values, preprocessor_loop *loop, text_file_position *tfp) {
|
||||||
|
inbuild_registry *R = RETRIEVE_POINTER_inbuild_registry(PPS->specifics);
|
||||||
|
text_stream *of = parameter_values[0];
|
||||||
|
text_stream *escape = parameter_values[1];
|
||||||
|
JSON_value *res = Registries::resource_from_textual_id(R, of, NULL, NULL);
|
||||||
|
if (res) {
|
||||||
|
JSON_value *author = JSON::look_up_object(res, I"author");
|
||||||
|
if (author == NULL) internal_error("could not find author");
|
||||||
|
Registries::write_escaped(PPS->dest, author->if_string, escape);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ |{title of: ID escape: ESC}| produces the title, optionally escaped with the
|
||||||
|
system below.
|
||||||
|
|
||||||
|
=
|
||||||
|
void Registries::title_expander(preprocessor_macro *mm, preprocessor_state *PPS,
|
||||||
|
text_stream **parameter_values, preprocessor_loop *loop, text_file_position *tfp) {
|
||||||
|
inbuild_registry *R = RETRIEVE_POINTER_inbuild_registry(PPS->specifics);
|
||||||
|
text_stream *of = parameter_values[0];
|
||||||
|
text_stream *escape = parameter_values[1];
|
||||||
|
JSON_value *res = Registries::resource_from_textual_id(R, of, NULL, NULL);
|
||||||
|
if (res) {
|
||||||
|
JSON_value *title = JSON::look_up_object(res, I"title");
|
||||||
|
if (title == NULL) internal_error("could not find title");
|
||||||
|
Registries::write_escaped(PPS->dest, title->if_string, escape);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ |{version of: ID escape: ESC}| produces the version, optionally escaped with the
|
||||||
|
system below.
|
||||||
|
|
||||||
|
=
|
||||||
|
void Registries::version_expander(preprocessor_macro *mm, preprocessor_state *PPS,
|
||||||
|
text_stream **parameter_values, preprocessor_loop *loop, text_file_position *tfp) {
|
||||||
|
inbuild_registry *R = RETRIEVE_POINTER_inbuild_registry(PPS->specifics);
|
||||||
|
text_stream *of = parameter_values[0];
|
||||||
|
text_stream *escape = parameter_values[1];
|
||||||
|
JSON_value *res = Registries::resource_from_textual_id(R, of, NULL, NULL);
|
||||||
|
if (res) {
|
||||||
|
JSON_value *version = JSON::look_up_object(res, I"version");
|
||||||
|
if (version == NULL) internal_error("could not find version");
|
||||||
|
Registries::write_escaped(PPS->dest, version->if_string, escape);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ |{summary of: ID escape: ESC}| produces the summary, optionally escaped with the
|
||||||
|
system below.
|
||||||
|
|
||||||
|
=
|
||||||
|
void Registries::summary_expander(preprocessor_macro *mm, preprocessor_state *PPS,
|
||||||
|
text_stream **parameter_values, preprocessor_loop *loop, text_file_position *tfp) {
|
||||||
|
inbuild_registry *R = RETRIEVE_POINTER_inbuild_registry(PPS->specifics);
|
||||||
|
text_stream *of = parameter_values[0];
|
||||||
|
text_stream *escape = parameter_values[1];
|
||||||
|
JSON_value *res = Registries::resource_from_textual_id(R, of, NULL, NULL);
|
||||||
|
if (res) {
|
||||||
|
JSON_value *summary = JSON::look_up_object(res, I"summary");
|
||||||
|
if (summary == NULL) internal_error("could not find summary");
|
||||||
|
Registries::write_escaped(PPS->dest, summary->if_string, escape);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ |{thread of: ID}| produces the forum thread number, if it exists, and prints
|
||||||
|
nothing if it does not.
|
||||||
|
|
||||||
|
=
|
||||||
|
void Registries::thread_expander(preprocessor_macro *mm, preprocessor_state *PPS,
|
||||||
|
text_stream **parameter_values, preprocessor_loop *loop, text_file_position *tfp) {
|
||||||
|
inbuild_registry *R = RETRIEVE_POINTER_inbuild_registry(PPS->specifics);
|
||||||
|
text_stream *of = parameter_values[0];
|
||||||
|
JSON_value *res = Registries::resource_from_textual_id(R, of, NULL, NULL);
|
||||||
|
if (res) {
|
||||||
|
JSON_value *thread = JSON::look_up_object(res, I"forum-thread");
|
||||||
|
if (thread) WRITE_TO(PPS->dest, "%d", thread->if_integer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ |{if-forum-thread for: ID}| ... |{end-if-forum-thread}| checks whether the
|
||||||
|
resource has a thread number, and if so, expands the material |...|. This is
|
||||||
|
crudely done as either a 0- or 1-term loop.
|
||||||
|
|
||||||
|
=
|
||||||
|
void Registries::if_forum_thread_expander(preprocessor_macro *mm, preprocessor_state *PPS,
|
||||||
|
text_stream **parameter_values, preprocessor_loop *loop, text_file_position *tfp) {
|
||||||
|
text_stream *of_id = parameter_values[0];
|
||||||
|
inbuild_registry *R = RETRIEVE_POINTER_inbuild_registry(PPS->specifics);
|
||||||
|
Preprocessor::set_loop_var_name(loop, I"ID");
|
||||||
|
JSON_value *sections = JSON::look_up_object(R->roster, I"sections");
|
||||||
|
if (sections == NULL) internal_error("could not find roster sections");
|
||||||
|
JSON_value *E;
|
||||||
|
int k = 0;
|
||||||
|
LOOP_OVER_LINKED_LIST(E, JSON_value, sections->if_list) {
|
||||||
|
JSON_value *subsections = JSON::look_up_object(E, I"subsections");
|
||||||
|
if (subsections == NULL) internal_error("could not find roster subsections");
|
||||||
|
JSON_value *F;
|
||||||
|
LOOP_OVER_LINKED_LIST(F, JSON_value, subsections->if_list) {
|
||||||
|
JSON_value *holdings = JSON::look_up_object(F, I"holdings");
|
||||||
|
if (holdings == NULL) internal_error("could not find roster holdings");
|
||||||
|
JSON_value *G;
|
||||||
|
LOOP_OVER_LINKED_LIST(G, JSON_value, holdings->if_list) {
|
||||||
|
TEMPORARY_TEXT(id)
|
||||||
|
WRITE_TO(id, "%d", k++);
|
||||||
|
if (Str::eq(id, of_id)) {
|
||||||
|
JSON_value *thread = JSON::look_up_object(G, I"forum-thread");
|
||||||
|
if (thread) Preprocessor::add_loop_iteration(loop, id);
|
||||||
|
}
|
||||||
|
DISCARD_TEXT(id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ |{section-mark of: SID}| produces the "section mark" of the section.
|
||||||
|
|
||||||
|
=
|
||||||
|
void Registries::section_mark_expander(preprocessor_macro *mm, preprocessor_state *PPS,
|
||||||
|
text_stream **parameter_values, preprocessor_loop *loop, text_file_position *tfp) {
|
||||||
|
inbuild_registry *R = RETRIEVE_POINTER_inbuild_registry(PPS->specifics);
|
||||||
|
text_stream *of = parameter_values[0];
|
||||||
|
TEMPORARY_TEXT(mark)
|
||||||
|
JSON_value *section = Registries::section_from_textual_id(R, of, mark);
|
||||||
|
if (section) WRITE_TO(PPS->dest, "%S", mark);
|
||||||
|
DISCARD_TEXT(mark)
|
||||||
|
}
|
||||||
|
|
||||||
|
@ |{section-title of: SID}| produces the title of the section.
|
||||||
|
|
||||||
|
=
|
||||||
|
void Registries::section_title_expander(preprocessor_macro *mm, preprocessor_state *PPS,
|
||||||
|
text_stream **parameter_values, preprocessor_loop *loop, text_file_position *tfp) {
|
||||||
|
inbuild_registry *R = RETRIEVE_POINTER_inbuild_registry(PPS->specifics);
|
||||||
|
text_stream *of = parameter_values[0];
|
||||||
|
JSON_value *section = Registries::section_from_textual_id(R, of, NULL);
|
||||||
|
if (section) {
|
||||||
|
JSON_value *title = JSON::look_up_object(section, I"title");
|
||||||
|
if (title == NULL) internal_error("could not find title");
|
||||||
|
WRITE_TO(PPS->dest, "%S", title->if_string);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ |{subsection-mark of: SID}| produces the "subsection mark" of the subsection.
|
||||||
|
|
||||||
|
=
|
||||||
|
void Registries::subsection_mark_expander(preprocessor_macro *mm, preprocessor_state *PPS,
|
||||||
|
text_stream **parameter_values, preprocessor_loop *loop, text_file_position *tfp) {
|
||||||
|
inbuild_registry *R = RETRIEVE_POINTER_inbuild_registry(PPS->specifics);
|
||||||
|
text_stream *of = parameter_values[0];
|
||||||
|
TEMPORARY_TEXT(mark)
|
||||||
|
JSON_value *subsection = Registries::subsection_from_textual_id(R, of, NULL, mark);
|
||||||
|
if (subsection) WRITE_TO(PPS->dest, "%S", mark);
|
||||||
|
DISCARD_TEXT(mark)
|
||||||
|
}
|
||||||
|
|
||||||
|
@ |{subsection-title of: SID}| produces the title of the subsection.
|
||||||
|
|
||||||
|
=
|
||||||
|
void Registries::subsection_title_expander(preprocessor_macro *mm, preprocessor_state *PPS,
|
||||||
|
text_stream **parameter_values, preprocessor_loop *loop, text_file_position *tfp) {
|
||||||
|
inbuild_registry *R = RETRIEVE_POINTER_inbuild_registry(PPS->specifics);
|
||||||
|
text_stream *of = parameter_values[0];
|
||||||
|
JSON_value *subsection = Registries::subsection_from_textual_id(R, of, NULL, NULL);
|
||||||
|
if (subsection) {
|
||||||
|
JSON_value *title = JSON::look_up_object(subsection, I"title");
|
||||||
|
if (title == NULL) internal_error("could not find title");
|
||||||
|
WRITE_TO(PPS->dest, "%S", title->if_string);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@h Escapology.
|
||||||
|
|quotes| escapes single quotation marks by placing a backslash before them,
|
||||||
|
as is necessary in JavaScript string literals.
|
||||||
|
|
||||||
|
|spaces| escapes spaces as |%20|, as is necessary in URLs.
|
||||||
|
|
||||||
|
|both| does both; |neither| does neither.
|
||||||
|
|
||||||
|
=
|
||||||
|
void Registries::write_escaped(OUTPUT_STREAM, text_stream *text, text_stream *escape) {
|
||||||
|
if (Str::eq(escape, I"quotes")) {
|
||||||
|
LOOP_THROUGH_TEXT(pos, text) {
|
||||||
|
wchar_t c = Str::get(pos);
|
||||||
|
if (c == '\'') {
|
||||||
|
PUT('\\');
|
||||||
|
PUT('\'');
|
||||||
|
} else {
|
||||||
|
PUT(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (Str::eq(escape, I"spaces")) {
|
||||||
|
LOOP_THROUGH_TEXT(pos, text) {
|
||||||
|
wchar_t c = Str::get(pos);
|
||||||
|
if (c == ' ') {
|
||||||
|
WRITE("%%20");
|
||||||
|
} else {
|
||||||
|
PUT(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (Str::eq(escape, I"both")) {
|
||||||
|
LOOP_THROUGH_TEXT(pos, text) {
|
||||||
|
wchar_t c = Str::get(pos);
|
||||||
|
if (c == '\'') {
|
||||||
|
PUT('\\');
|
||||||
|
PUT('\'');
|
||||||
|
} else if (c == ' ') {
|
||||||
|
WRITE("%%20");
|
||||||
|
} else {
|
||||||
|
PUT(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if ((Str::eq(escape, I"neither")) || (Str::len(escape) == 0)) {
|
||||||
|
WRITE("%S", text);
|
||||||
|
} else WRITE_TO(STDERR, "error: no such escape as '%S'\n", escape);
|
||||||
|
}
|
||||||
|
|
||||||
|
@h Looking up by textual ID.
|
||||||
|
Given a textual resource id |id|, return the JSON object for it, or else
|
||||||
|
print an error and return |NULL|.
|
||||||
|
|
||||||
|
On success, the SID of its section is written to |sectionid|, and the SSID
|
||||||
|
of its subsection to |subsectionid|.
|
||||||
|
|
||||||
|
=
|
||||||
|
JSON_value *Registries::resource_from_textual_id(inbuild_registry *R, text_stream *id,
|
||||||
|
text_stream *sectionid, text_stream *subsectionid) {
|
||||||
|
if ((R == NULL) || (R->roster == NULL)) internal_error("bad registry");
|
||||||
|
JSON_value *sections = JSON::look_up_object(R->roster, I"sections");
|
||||||
|
if (sections == NULL) internal_error("could not find roster sections");
|
||||||
|
JSON_value *E;
|
||||||
|
int i = 0, j = 0, k = 0;
|
||||||
|
LOOP_OVER_LINKED_LIST(E, JSON_value, sections->if_list) {
|
||||||
|
JSON_value *subsections = JSON::look_up_object(E, I"subsections");
|
||||||
|
if (subsections == NULL) internal_error("could not find roster subsections");
|
||||||
|
JSON_value *F;
|
||||||
|
LOOP_OVER_LINKED_LIST(F, JSON_value, subsections->if_list) {
|
||||||
|
JSON_value *holdings = JSON::look_up_object(F, I"holdings");
|
||||||
|
if (holdings == NULL) internal_error("could not find roster holdings");
|
||||||
|
JSON_value *G;
|
||||||
|
LOOP_OVER_LINKED_LIST(G, JSON_value, holdings->if_list) {
|
||||||
|
int match = FALSE;
|
||||||
|
TEMPORARY_TEXT(this_id)
|
||||||
|
WRITE_TO(this_id, "%d", k);
|
||||||
|
if (Str::eq(id, this_id)) match = TRUE;
|
||||||
|
DISCARD_TEXT(this_id)
|
||||||
|
if (match) {
|
||||||
|
WRITE_TO(sectionid, "%d", i);
|
||||||
|
WRITE_TO(subsectionid, "%d", j);
|
||||||
|
return G;
|
||||||
|
}
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
WRITE_TO(STDERR, "error: no such resource ID as '%S'\n", id);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ Similarly for sections, with a |SID|.
|
||||||
|
|
||||||
|
The "mark" for a section is 1, 2, 3, ...
|
||||||
|
|
||||||
|
=
|
||||||
|
JSON_value *Registries::section_from_textual_id(inbuild_registry *R, text_stream *sid,
|
||||||
|
text_stream *mark) {
|
||||||
|
if ((R == NULL) || (R->roster == NULL)) internal_error("bad registry");
|
||||||
|
JSON_value *sections = JSON::look_up_object(R->roster, I"sections");
|
||||||
|
if (sections == NULL) internal_error("could not find roster sections");
|
||||||
|
JSON_value *E;
|
||||||
|
int i = 0;
|
||||||
|
LOOP_OVER_LINKED_LIST(E, JSON_value, sections->if_list) {
|
||||||
|
int match = FALSE;
|
||||||
|
TEMPORARY_TEXT(this_sid)
|
||||||
|
WRITE_TO(this_sid, "%d", i);
|
||||||
|
if (Str::eq(sid, this_sid)) match = TRUE;
|
||||||
|
DISCARD_TEXT(this_sid)
|
||||||
|
if (match) {
|
||||||
|
WRITE_TO(mark, "%d", i+1);
|
||||||
|
return E;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
WRITE_TO(STDERR, "error: no such section ID as '%S'\n", sid);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ And subsections, with a |SSID|:
|
||||||
|
|
||||||
|
The "mark" for a subsection is 1.1, 1.2, 1.3, ..., 2.1, 2.2, ...
|
||||||
|
|
||||||
|
=
|
||||||
|
JSON_value *Registries::subsection_from_textual_id(inbuild_registry *R, text_stream *ssid,
|
||||||
|
text_stream *mark, text_stream *submark) {
|
||||||
|
if ((R == NULL) || (R->roster == NULL)) internal_error("bad registry");
|
||||||
|
JSON_value *sections = JSON::look_up_object(R->roster, I"sections");
|
||||||
|
if (sections == NULL) internal_error("could not find roster sections");
|
||||||
|
JSON_value *E;
|
||||||
|
int i = 0, j = 0;
|
||||||
|
LOOP_OVER_LINKED_LIST(E, JSON_value, sections->if_list) {
|
||||||
|
JSON_value *subsections = JSON::look_up_object(E, I"subsections");
|
||||||
|
if (subsections == NULL) internal_error("could not find roster subsections");
|
||||||
|
int x = 1;
|
||||||
|
JSON_value *F;
|
||||||
|
LOOP_OVER_LINKED_LIST(F, JSON_value, subsections->if_list) {
|
||||||
|
int match = FALSE;
|
||||||
|
TEMPORARY_TEXT(this_ssid)
|
||||||
|
WRITE_TO(this_ssid, "%d", j);
|
||||||
|
if (Str::eq(ssid, this_ssid)) match = TRUE;
|
||||||
|
DISCARD_TEXT(this_ssid)
|
||||||
|
if (match) {
|
||||||
|
WRITE_TO(mark, "%d", i+1);
|
||||||
|
WRITE_TO(submark, "%d.%d", i+1, x);
|
||||||
|
return F;
|
||||||
|
}
|
||||||
|
j++, x++;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
WRITE_TO(STDERR, "error: no such subsection ID as '%S'\n", ssid);
|
||||||
|
return NULL;
|
||||||
|
}
|
|
@ -19,6 +19,7 @@ Chapter 2: Conceptual Framework
|
||||||
Copy Errors
|
Copy Errors
|
||||||
Requirements
|
Requirements
|
||||||
Nests
|
Nests
|
||||||
|
Registries
|
||||||
JSON Metadata
|
JSON Metadata
|
||||||
|
|
||||||
Chapter 3: Incremental Builds
|
Chapter 3: Incremental Builds
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
Total memory consumption was 120981K = 118 MB
|
Total memory consumption was 120989K = 118 MB
|
||||||
|
|
||||||
---- was used for 2048236 objects, in 364575 frames in 0 x 800K = 0K = 0 MB:
|
---- was used for 2048237 objects, in 364576 frames in 0 x 800K = 0K = 0 MB:
|
||||||
|
|
||||||
33.7% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
|
33.7% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
|
||||||
21.0% text_stream_array 4620 x 100 = 462000 objects, 26019840 bytes
|
21.0% text_stream_array 4620 x 100 = 462000 objects, 26019840 bytes
|
||||||
|
@ -44,7 +44,7 @@ Total memory consumption was 120981K = 118 MB
|
||||||
0.2% inference_subject 666 objects, 261072 bytes
|
0.2% inference_subject 666 objects, 261072 bytes
|
||||||
0.1% vanilla_function 3683 objects, 235712 bytes
|
0.1% vanilla_function 3683 objects, 235712 bytes
|
||||||
0.1% binary_predicate 322 objects, 170016 bytes
|
0.1% binary_predicate 322 objects, 170016 bytes
|
||||||
0.1% hierarchy_location 1123 objects, 161712 bytes
|
0.1% hierarchy_location 1124 objects, 161856 bytes
|
||||||
0.1% linguistic_stock_item 3318 objects, 159264 bytes
|
0.1% linguistic_stock_item 3318 objects, 159264 bytes
|
||||||
0.1% rule_family_data 401 objects, 147568 bytes
|
0.1% rule_family_data 401 objects, 147568 bytes
|
||||||
0.1% nonterminal 758 objects, 139472 bytes
|
0.1% nonterminal 758 objects, 139472 bytes
|
||||||
|
@ -59,7 +59,7 @@ Total memory consumption was 120981K = 118 MB
|
||||||
---- lexical_cluster 2519 objects, 80608 bytes
|
---- lexical_cluster 2519 objects, 80608 bytes
|
||||||
---- pcalc_term_array 2 x 1000 = 2000 objects, 80064 bytes
|
---- pcalc_term_array 2 x 1000 = 2000 objects, 80064 bytes
|
||||||
---- kind_variable_declaration 1655 objects, 79440 bytes
|
---- kind_variable_declaration 1655 objects, 79440 bytes
|
||||||
---- inter_tree 6 objects, 79296 bytes
|
---- inter_tree 6 objects, 79344 bytes
|
||||||
---- label_namespace 1472 objects, 70656 bytes
|
---- label_namespace 1472 objects, 70656 bytes
|
||||||
---- rulebook 407 objects, 68376 bytes
|
---- rulebook 407 objects, 68376 bytes
|
||||||
---- spatial_data 671 objects, 64416 bytes
|
---- spatial_data 671 objects, 64416 bytes
|
||||||
|
@ -79,8 +79,8 @@ Total memory consumption was 120981K = 118 MB
|
||||||
---- ap_clause_array 2 x 400 = 800 objects, 51264 bytes
|
---- ap_clause_array 2 x 400 = 800 objects, 51264 bytes
|
||||||
---- HTML_tag_array 1 x 1000 objects, 48032 bytes
|
---- HTML_tag_array 1 x 1000 objects, 48032 bytes
|
||||||
---- text_substitution 437 objects, 41952 bytes
|
---- text_substitution 437 objects, 41952 bytes
|
||||||
---- activity_list_array 1 x 1000 objects, 40032 bytes
|
|
||||||
---- anl_clause_array 1 x 1000 objects, 40032 bytes
|
---- anl_clause_array 1 x 1000 objects, 40032 bytes
|
||||||
|
---- activity_list_array 1 x 1000 objects, 40032 bytes
|
||||||
---- to_family_data 497 objects, 39760 bytes
|
---- to_family_data 497 objects, 39760 bytes
|
||||||
---- shared_variable_access_list_array 12 x 100 = 1200 objects, 38784 bytes
|
---- shared_variable_access_list_array 12 x 100 = 1200 objects, 38784 bytes
|
||||||
---- parsing_data 671 objects, 37576 bytes
|
---- parsing_data 671 objects, 37576 bytes
|
||||||
|
@ -107,8 +107,8 @@ Total memory consumption was 120981K = 118 MB
|
||||||
---- parse_node_tree 20 objects, 17280 bytes
|
---- parse_node_tree 20 objects, 17280 bytes
|
||||||
---- understanding_reference_array 2 x 100 = 200 objects, 16064 bytes
|
---- understanding_reference_array 2 x 100 = 200 objects, 16064 bytes
|
||||||
---- to_phrase_request 59 objects, 16048 bytes
|
---- to_phrase_request 59 objects, 16048 bytes
|
||||||
---- match_avinue_array 1 x 1000 objects, 16032 bytes
|
|
||||||
---- action_name_list_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
|
||||||
---- JSON_value 182 objects, 16016 bytes
|
---- JSON_value 182 objects, 16016 bytes
|
||||||
---- build_vertex 130 objects, 15600 bytes
|
---- build_vertex 130 objects, 15600 bytes
|
||||||
---- adjective 137 objects, 15344 bytes
|
---- adjective 137 objects, 15344 bytes
|
||||||
|
@ -137,8 +137,8 @@ Total memory consumption was 120981K = 118 MB
|
||||||
---- section_md 45 objects, 4320 bytes
|
---- section_md 45 objects, 4320 bytes
|
||||||
---- build_script 130 objects, 4160 bytes
|
---- build_script 130 objects, 4160 bytes
|
||||||
---- compatibility_specification 86 objects, 4128 bytes
|
---- compatibility_specification 86 objects, 4128 bytes
|
||||||
---- activity 35 objects, 3920 bytes
|
|
||||||
---- command_line_switch 49 objects, 3920 bytes
|
---- command_line_switch 49 objects, 3920 bytes
|
||||||
|
---- activity 35 objects, 3920 bytes
|
||||||
---- submodule_request 94 objects, 3760 bytes
|
---- submodule_request 94 objects, 3760 bytes
|
||||||
---- parse_node_annotation_type 114 objects, 3648 bytes
|
---- parse_node_annotation_type 114 objects, 3648 bytes
|
||||||
---- property_setting_bp_data 84 objects, 3360 bytes
|
---- property_setting_bp_data 84 objects, 3360 bytes
|
||||||
|
@ -183,8 +183,8 @@ Total memory consumption was 120981K = 118 MB
|
||||||
---- JSON_pair_requirement 26 objects, 832 bytes
|
---- JSON_pair_requirement 26 objects, 832 bytes
|
||||||
---- phrase_option_array 1 x 100 objects, 824 bytes
|
---- phrase_option_array 1 x 100 objects, 824 bytes
|
||||||
---- inbuild_search_result 20 objects, 800 bytes
|
---- inbuild_search_result 20 objects, 800 bytes
|
||||||
---- web_md 5 objects, 720 bytes
|
|
||||||
---- internal_test 15 objects, 720 bytes
|
---- internal_test 15 objects, 720 bytes
|
||||||
|
---- web_md 5 objects, 720 bytes
|
||||||
---- relation_guard 5 objects, 640 bytes
|
---- relation_guard 5 objects, 640 bytes
|
||||||
---- implication 13 objects, 624 bytes
|
---- implication 13 objects, 624 bytes
|
||||||
---- code_generation 1 object, 576 bytes
|
---- code_generation 1 object, 576 bytes
|
||||||
|
@ -192,42 +192,42 @@ Total memory consumption was 120981K = 118 MB
|
||||||
---- rulebook_outcome 17 objects, 544 bytes
|
---- rulebook_outcome 17 objects, 544 bytes
|
||||||
---- small_word_set 11 objects, 528 bytes
|
---- small_word_set 11 objects, 528 bytes
|
||||||
---- inform_kit 5 objects, 520 bytes
|
---- inform_kit 5 objects, 520 bytes
|
||||||
---- equation 4 objects, 480 bytes
|
|
||||||
---- inform_language 6 objects, 480 bytes
|
---- inform_language 6 objects, 480 bytes
|
||||||
|
---- equation 4 objects, 480 bytes
|
||||||
---- i6_memory_setting 14 objects, 448 bytes
|
---- i6_memory_setting 14 objects, 448 bytes
|
||||||
---- inference_family 11 objects, 440 bytes
|
|
||||||
---- chapter_md 5 objects, 440 bytes
|
---- chapter_md 5 objects, 440 bytes
|
||||||
|
---- inference_family 11 objects, 440 bytes
|
||||||
---- bp_family 13 objects, 416 bytes
|
---- bp_family 13 objects, 416 bytes
|
||||||
---- module 5 objects, 400 bytes
|
|
||||||
---- inter_annotation_form 10 objects, 400 bytes
|
---- inter_annotation_form 10 objects, 400 bytes
|
||||||
|
---- module 5 objects, 400 bytes
|
||||||
---- article_usage 8 objects, 384 bytes
|
---- article_usage 8 objects, 384 bytes
|
||||||
---- source_file 5 objects, 360 bytes
|
---- source_file 5 objects, 360 bytes
|
||||||
---- inbuild_genre 7 objects, 336 bytes
|
---- inbuild_genre 7 objects, 336 bytes
|
||||||
|
---- cached_kind_declaration 8 objects, 320 bytes
|
||||||
|
---- module_request 8 objects, 320 bytes
|
||||||
---- grammatical_category 8 objects, 320 bytes
|
---- grammatical_category 8 objects, 320 bytes
|
||||||
---- pronoun 8 objects, 320 bytes
|
---- pronoun 8 objects, 320 bytes
|
||||||
---- cached_kind_declaration 8 objects, 320 bytes
|
|
||||||
---- door_dir_notice 5 objects, 320 bytes
|
---- door_dir_notice 5 objects, 320 bytes
|
||||||
---- module_request 8 objects, 320 bytes
|
|
||||||
---- tree_inventory 1 object, 312 bytes
|
|
||||||
---- inter_pipeline 1 object, 312 bytes
|
---- inter_pipeline 1 object, 312 bytes
|
||||||
|
---- tree_inventory 1 object, 312 bytes
|
||||||
---- up_family 9 objects, 288 bytes
|
---- up_family 9 objects, 288 bytes
|
||||||
---- compilation_unit 5 objects, 280 bytes
|
|
||||||
---- explicit_bp_data 5 objects, 280 bytes
|
---- explicit_bp_data 5 objects, 280 bytes
|
||||||
---- contents_entry 7 objects, 280 bytes
|
|
||||||
---- door_to_notice 5 objects, 280 bytes
|
---- door_to_notice 5 objects, 280 bytes
|
||||||
|
---- contents_entry 7 objects, 280 bytes
|
||||||
|
---- compilation_unit 5 objects, 280 bytes
|
||||||
---- verb_usage_tier 5 objects, 240 bytes
|
---- verb_usage_tier 5 objects, 240 bytes
|
||||||
---- adjective_meaning_family 7 objects, 224 bytes
|
---- adjective_meaning_family 7 objects, 224 bytes
|
||||||
---- test_scenario 1 object, 216 bytes
|
|
||||||
---- inform_project 1 object, 216 bytes
|
---- inform_project 1 object, 216 bytes
|
||||||
|
---- test_scenario 1 object, 216 bytes
|
||||||
---- release_instructions 1 object, 208 bytes
|
---- release_instructions 1 object, 208 bytes
|
||||||
---- code_generator 5 objects, 200 bytes
|
|
||||||
---- build_skill 5 objects, 200 bytes
|
---- build_skill 5 objects, 200 bytes
|
||||||
|
---- code_generator 5 objects, 200 bytes
|
||||||
---- plural_dictionary_entry 4 objects, 192 bytes
|
---- plural_dictionary_entry 4 objects, 192 bytes
|
||||||
---- kit_dependency 4 objects, 192 bytes
|
---- kit_dependency 4 objects, 192 bytes
|
||||||
---- inference_subject_family 5 objects, 160 bytes
|
|
||||||
---- inter_architecture 4 objects, 160 bytes
|
---- inter_architecture 4 objects, 160 bytes
|
||||||
---- imperative_defn_family 4 objects, 160 bytes
|
|
||||||
---- attachment_instruction 4 objects, 160 bytes
|
---- attachment_instruction 4 objects, 160 bytes
|
||||||
|
---- imperative_defn_family 4 objects, 160 bytes
|
||||||
|
---- inference_subject_family 5 objects, 160 bytes
|
||||||
---- element_activation 4 objects, 128 bytes
|
---- element_activation 4 objects, 128 bytes
|
||||||
---- inbuild_nest 3 objects, 120 bytes
|
---- inbuild_nest 3 objects, 120 bytes
|
||||||
---- local_block_value 2 objects, 112 bytes
|
---- local_block_value 2 objects, 112 bytes
|
||||||
|
@ -235,19 +235,19 @@ Total memory consumption was 120981K = 118 MB
|
||||||
---- group_together_function 2 objects, 80 bytes
|
---- group_together_function 2 objects, 80 bytes
|
||||||
---- compile_task_data 1 object, 80 bytes
|
---- compile_task_data 1 object, 80 bytes
|
||||||
---- article 2 objects, 80 bytes
|
---- article 2 objects, 80 bytes
|
||||||
---- figures_data 1 object, 56 bytes
|
|
||||||
---- inter_warehouse 1 object, 56 bytes
|
---- inter_warehouse 1 object, 56 bytes
|
||||||
|
---- figures_data 1 object, 56 bytes
|
||||||
---- build_methodology 1 object, 56 bytes
|
---- build_methodology 1 object, 56 bytes
|
||||||
---- star_invention 1 object, 48 bytes
|
|
||||||
---- HTML_file_state 1 object, 48 bytes
|
---- HTML_file_state 1 object, 48 bytes
|
||||||
---- loop_over_scope 1 object, 40 bytes
|
---- star_invention 1 object, 48 bytes
|
||||||
|
---- kind_template_definition 1 object, 40 bytes
|
||||||
---- I6_generation_data 1 object, 40 bytes
|
---- I6_generation_data 1 object, 40 bytes
|
||||||
---- by_function_bp_data 1 object, 40 bytes
|
---- by_function_bp_data 1 object, 40 bytes
|
||||||
---- kind_template_definition 1 object, 40 bytes
|
---- loop_over_scope 1 object, 40 bytes
|
||||||
|
|
||||||
100.0% was used for memory not allocated for objects:
|
100.0% was used for memory not allocated for objects:
|
||||||
|
|
||||||
56.8% text stream storage 70447848 bytes in 479132 claims
|
56.8% text stream storage 70455588 bytes in 479200 claims
|
||||||
4.2% dictionary storage 5263872 bytes in 7588 claims
|
4.2% dictionary storage 5263872 bytes in 7588 claims
|
||||||
---- sorting 1520 bytes in 159 claims
|
---- sorting 1520 bytes in 159 claims
|
||||||
5.8% source text 7200000 bytes in 3 claims
|
5.8% source text 7200000 bytes in 3 claims
|
||||||
|
@ -265,5 +265,5 @@ Total memory consumption was 120981K = 118 MB
|
||||||
---- code generation workspace for objects 1336 bytes in 4 claims
|
---- code generation workspace for objects 1336 bytes in 4 claims
|
||||||
0.2% emitter array storage 280288 bytes in 1999 claims
|
0.2% emitter array storage 280288 bytes in 1999 claims
|
||||||
|
|
||||||
-150.0% was overhead - -185923840 bytes = -181566K = -177 MB
|
-150.0% was overhead - -185924032 bytes = -181566K = -177 MB
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
100.0% in inform7 run
|
100.0% in inform7 run
|
||||||
70.4% in compilation to Inter
|
70.4% in compilation to Inter
|
||||||
50.5% in //Sequence::undertake_queued_tasks//
|
50.0% in //Sequence::undertake_queued_tasks//
|
||||||
4.4% in //MajorNodes::pre_pass//
|
4.6% in //MajorNodes::pre_pass//
|
||||||
3.4% in //MajorNodes::pass_1//
|
3.4% in //MajorNodes::pass_1//
|
||||||
1.8% in //ImperativeDefinitions::assess_all//
|
1.8% in //ImperativeDefinitions::assess_all//
|
||||||
1.4% in //RTKindConstructors::compile//
|
1.4% in //RTKindConstructors::compile//
|
||||||
|
@ -17,17 +17,17 @@
|
||||||
0.2% in //RTKindConstructors::compile_permissions//
|
0.2% in //RTKindConstructors::compile_permissions//
|
||||||
0.2% in //Task::make_built_in_kind_constructors//
|
0.2% in //Task::make_built_in_kind_constructors//
|
||||||
0.2% in //World::stages_II_and_III//
|
0.2% in //World::stages_II_and_III//
|
||||||
2.6% not specifically accounted for
|
3.0% not specifically accounted for
|
||||||
26.6% in running Inter pipeline
|
26.3% in running Inter pipeline
|
||||||
10.3% in step 14/15: generate inform6 -> auto.inf
|
10.3% in step 14/15: generate inform6 -> auto.inf
|
||||||
5.9% in step 5/15: load-binary-kits
|
5.6% in step 5/15: load-binary-kits
|
||||||
5.4% in step 6/15: make-synoptic-module
|
5.6% in step 6/15: make-synoptic-module
|
||||||
1.4% in step 9/15: make-identifiers-unique
|
1.6% in step 9/15: make-identifiers-unique
|
||||||
0.4% in step 12/15: eliminate-redundant-operations
|
0.4% in step 12/15: eliminate-redundant-operations
|
||||||
0.4% in step 4/15: compile-splats
|
0.4% in step 4/15: compile-splats
|
||||||
0.4% in step 7/15: shorten-wiring
|
0.4% in step 7/15: shorten-wiring
|
||||||
0.4% in step 8/15: detect-indirect-calls
|
0.4% in step 8/15: detect-indirect-calls
|
||||||
0.2% in step 11/15: eliminate-redundant-labels
|
0.2% in step 11/15: eliminate-redundant-labels
|
||||||
1.6% not specifically accounted for
|
1.2% not specifically accounted for
|
||||||
2.6% in supervisor
|
2.6% in supervisor
|
||||||
0.3% not specifically accounted for
|
0.7% not specifically accounted for
|
||||||
|
|
25
inform7/Internal/Miscellany/registry.jsonr
Normal file
25
inform7/Internal/Miscellany/registry.jsonr
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<registry-holding> ::= {
|
||||||
|
"author": string,
|
||||||
|
"title": string,
|
||||||
|
?"standard-installation": boolean,
|
||||||
|
?"visible": boolean,
|
||||||
|
?"forum-thread": number,
|
||||||
|
"version": string,
|
||||||
|
"summary": string,
|
||||||
|
"time": string
|
||||||
|
}
|
||||||
|
|
||||||
|
<registry-subsection> ::= {
|
||||||
|
"title": string,
|
||||||
|
"holdings": [ <registry-holding>* ]
|
||||||
|
}
|
||||||
|
|
||||||
|
<registry-section> ::= {
|
||||||
|
"title": string,
|
||||||
|
"leafname": string,
|
||||||
|
"subsections": [ <registry-subsection>* ]
|
||||||
|
}
|
||||||
|
|
||||||
|
<registry-metadata> ::= {
|
||||||
|
"sections": [ <registry-section>* ]
|
||||||
|
}
|
|
@ -21,7 +21,8 @@ but they're just plain old files, and are not managed by Inbuild as "copies".
|
||||||
@e CSS_SET_BY_PLATFORM_IRES
|
@e CSS_SET_BY_PLATFORM_IRES
|
||||||
@e CSS_FOR_STANDARD_PAGES_IRES
|
@e CSS_FOR_STANDARD_PAGES_IRES
|
||||||
@e EXTENSION_DOCUMENTATION_MODEL_IRES
|
@e EXTENSION_DOCUMENTATION_MODEL_IRES
|
||||||
@e JSON_REQUIREMENTS_IRES
|
@e RESOURCE_JSON_REQS_IRES
|
||||||
|
@e REGISTRY_JSON_REQS_IRES
|
||||||
|
|
||||||
=
|
=
|
||||||
filename *InstalledFiles::filename(int ires) {
|
filename *InstalledFiles::filename(int ires) {
|
||||||
|
@ -39,8 +40,10 @@ filename *InstalledFiles::filename(int ires) {
|
||||||
return Filenames::in(misc, I"DefaultCover.jpg");
|
return Filenames::in(misc, I"DefaultCover.jpg");
|
||||||
case SMALL_DEFAULT_COVER_ART_IRES:
|
case SMALL_DEFAULT_COVER_ART_IRES:
|
||||||
return Filenames::in(misc, I"Small Cover.jpg");
|
return Filenames::in(misc, I"Small Cover.jpg");
|
||||||
case JSON_REQUIREMENTS_IRES:
|
case RESOURCE_JSON_REQS_IRES:
|
||||||
return Filenames::in(misc, I"metadata.jsonr");
|
return Filenames::in(misc, I"resource.jsonr");
|
||||||
|
case REGISTRY_JSON_REQS_IRES:
|
||||||
|
return Filenames::in(misc, I"registry.jsonr");
|
||||||
|
|
||||||
case CBLORB_REPORT_MODEL_IRES:
|
case CBLORB_REPORT_MODEL_IRES:
|
||||||
return InstalledFiles::varied_by_platform(models, I"CblorbModel.html");
|
return InstalledFiles::varied_by_platform(models, I"CblorbModel.html");
|
||||||
|
|
Loading…
Reference in a new issue