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

Reconstructed English Language as a directory-format extension and improved release blurbs

This commit is contained in:
Graham Nelson 2024-05-19 01:08:01 +01:00
parent 3f985594bd
commit b37d193634
59 changed files with 845 additions and 244 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
[Version](notes/versioning.md): 10.2.0-beta+6X62 'Krypton' (14 May 2024)
[Version](notes/versioning.md): 10.2.0-beta+6X63 'Krypton' (19 May 2024)
## About Inform
@ -135,10 +135,6 @@ The following webs are the source for the two most important extensions shipped
* [Basic Inform by Graham Nelson](inform7/extensions/basic_inform) - __v2__ - [★ Web](https://ganelson.github.io/inform/basic_inform/index.html)
* [Standard Rules by Graham Nelson](inform7/extensions/standard_rules) - __v7__ - [★ Web](https://ganelson.github.io/inform/standard_rules/index.html)
Other extensions shipped with Inform are not presented as webs, but as single files:
* [English Language by Graham Nelson](<inform7/Internal/Extensions/Graham Nelson/English Language.i7x>) - __v2__
### Website templates and interpreters shipped with Inform
These are templates used by Inform to release story files within a website:

View file

@ -1,3 +1,3 @@
Prerelease: beta
Build Date: 14 May 2024
Build Number: 6X62
Build Date: 19 May 2024
Build Number: 6X63

View file

@ -554,12 +554,6 @@ command, to be re-entered later on when actions are processed.
<span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">dialogue_selection_value</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">LIST_OF_TY_GetItem</span><span class="plain-syntax">(</span><span class="identifier-syntax">list</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">LIST_OF_TY_SetLength</span><span class="plain-syntax">(</span><span class="identifier-syntax">list</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="comment-syntax"> style bold;</span>
<span class="comment-syntax"> TEXT_TY_Say(DirectorChoiceRawContent(dc));</span>
<span class="comment-syntax"> style roman;</span>
<span class="comment-syntax"> print "^";</span>
<span class="comment-syntax"> say__p = 1;</span>
<span class="comment-syntax"> DivideParagraphPoint();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DirectorExerciseChoice</span><span class="plain-syntax">(</span><span class="identifier-syntax">dc</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PARSED_COMMAND_DCODEDT</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">director_is_paused_for_command</span><span class="plain-syntax"> = </span><span class="reserved-syntax">true</span><span class="plain-syntax">;</span>

View file

@ -357,11 +357,21 @@ function togglePopup(material_id) {
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">LicenceDeclaration::anything_to_declare</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Task::project</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inbuild_licence</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">licence</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">read_from_JSON</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">discussed_in_source</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-ldr.html#SP5" class="function-link"><span class="function-syntax">LicenceDeclaration::to_be_declared</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">inform_extension</span><span class="plain-syntax">, </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">extensions_included</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">licence</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">read_from_JSON</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">discussed_in_source</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-ldr.html#SP5" class="function-link"><span class="function-syntax">LicenceDeclaration::to_be_declared</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">LicenceDeclaration::to_be_declared</span><span class="plain-syntax">(</span><span class="identifier-syntax">inbuild_licence</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">L</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">read_from_JSON</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">discussed_in_source</span><span 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">L</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">rights_history</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"This extension is basic to Inform and requires no acknowledgement."</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<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>

View file

@ -139,6 +139,7 @@ the Blorb-file's filename won't be too long for the file system.
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"\n! Other material to release\n\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-tbf.html#SP1_2_6" class="named-paragraph-link"><span class="named-paragraph">Give instructions about source text, solution and library card</span><span class="named-paragraph-number">1.2.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-tbf.html#SP1_2_7" class="named-paragraph-link"><span class="named-paragraph">Give instructions about auxiliary files</span><span class="named-paragraph-number">1.2.7</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">templates_declared</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rel</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">release_interpreter</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="2-tbf.html#SP1_2_8" class="named-paragraph-link"><span class="named-paragraph">Give instructions to release with an interpreter for Web play</span><span class="named-paragraph-number">1.2.8</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">rel</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">release_website</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="2-tbf.html#SP1_2_9" class="named-paragraph-link"><span class="named-paragraph">Give instructions to construct a website around the release</span><span class="named-paragraph-number">1.2.9</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-tbf.html#SP1_2_10" class="named-paragraph-link"><span class="named-paragraph">Give hints to Inblorb for its HTML status page</span><span class="named-paragraph-number">1.2.10</span></a></span><span class="plain-syntax">;</span>
@ -148,7 +149,7 @@ the Blorb-file's filename won't be too long for the file system.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"status \"%f\" \"%f\"\n\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">"status \"%f\" \"%f\"\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InstalledFiles::filename</span><span class="plain-syntax">(</span><span class="identifier-syntax">CBLORB_REPORT_MODEL_IRES</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Task::cblorb_report_file</span><span class="plain-syntax">());</span>
</pre>
@ -312,7 +313,7 @@ file online.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"\n! Website instructions\n\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">"\n! Interpreter instructions\n\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">"placeholder [ENCODEDSTORYFILE] = \""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">STREAM_COPY</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">".js\"\n"</span><span class="plain-syntax">);</span>
@ -373,22 +374,48 @@ included by the project, and then the external area, and finally the internal.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="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">Projects::nest_list</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::project</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">N</span><span class="plain-syntax">, </span><span class="identifier-syntax">inbuild_nest</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"template path \"%p\"\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">TemplateManager::path_within_nest</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Nests::get_tag</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">) == </span><span class="identifier-syntax">MATERIALS_NEST_TAG</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">inform_extension</span><span class="plain-syntax">, </span><span class="identifier-syntax">Task::project</span><span class="plain-syntax">()-&gt;</span><span class="identifier-syntax">extensions_included</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Extensions::materials_path</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"template path \"%p\"\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">TemplateManager::path_within_nest</span><span class="plain-syntax">(</span><span class="identifier-syntax">Nests::new</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">templates_declared</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">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="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">Projects::nest_list</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::project</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">declared</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="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="identifier-syntax">inbuild_nest</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">M</span><span class="plain-syntax"> = </span><span class="identifier-syntax">N</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-tbf.html#SP1_2_8_1_1" class="named-paragraph-link"><span class="named-paragraph">Declare one template path</span><span class="named-paragraph-number">1.2.8.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Nests::get_tag</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">) == </span><span class="identifier-syntax">MATERIALS_NEST_TAG</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">inform_extension</span><span class="plain-syntax">, </span><span class="identifier-syntax">Task::project</span><span class="plain-syntax">()-&gt;</span><span class="identifier-syntax">extensions_included</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Extensions::materials_path</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">M</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nests::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-tbf.html#SP1_2_8_1_1" class="named-paragraph-link"><span class="named-paragraph">Declare one template path</span><span class="named-paragraph-number">1.2.8.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">templates_declared</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-tbf.html#SP1_2_8">&#167;1.2.8</a>, <a href="2-tbf.html#SP1_2_9">&#167;1.2.9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_8_1_1" class="paragraph-anchor"></a><b>&#167;1.2.8.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Declare one template path</span><span class="named-paragraph-number">1.2.8.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">TP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TemplateManager::path_within_nest</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Directories::exists</span><span class="plain-syntax">(</span><span class="identifier-syntax">TP</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">declaration</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">declaration</span><span class="plain-syntax">, </span><span class="string-syntax">"template path \"%p\"\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">TP</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">already</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">done</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">done</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax">, </span><span class="identifier-syntax">declared</span><span 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">done</span><span class="plain-syntax">, </span><span class="identifier-syntax">declaration</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">already</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">already</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">declaration</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">declaration</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax">, </span><span class="identifier-syntax">declared</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-tbf.html#SP1_2_8_1">&#167;1.2.8.1</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_10" class="paragraph-anchor"></a><b>&#167;1.2.10. </b>Inblorb reports its progress, or lack of it, with an HTML page, just as we do.
This page however includes some hints on what the user might have chosen
instead of what he actually did choose, and we'll write those hints now, for

View file

@ -67,6 +67,8 @@ function togglePopup(material_id) {
<span class="definition-keyword">enum</span> <span class="constant-syntax">PROBLEMS_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">KIT_VERSIONS_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">SYNC_KIT_VERSIONS_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">EXTENSION_VERSIONS_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">SYNC_EXTENSION_VERSIONS_CLSW</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">path_to_inpolicy</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> where we are installed</span>
@ -86,6 +88,10 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">U</span><span class="string-syntax">"show version numbers of the built-in kits"</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">SYNC_KIT_VERSIONS_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="string-syntax">"sync-kit-versions"</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">U</span><span class="string-syntax">"fix version numbers of the built-in kits to match core inform7 version"</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">EXTENSION_VERSIONS_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="string-syntax">"extension-versions"</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">U</span><span class="string-syntax">"show version numbers of the built-in extensions"</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">SYNC_EXTENSION_VERSIONS_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="string-syntax">"sync-extension-versions"</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">U</span><span class="string-syntax">"fix version numbers of the built-in extensions to match core inform7 version"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP6" class="function-link"><span class="function-syntax">CommandLine::declare_boolean_switch</span></a><span class="plain-syntax">(</span><span class="constant-syntax">SILENCE_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="string-syntax">"silence"</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">U</span><span class="string-syntax">"print nothing unless there's something wrong"</span><span class="plain-syntax">, </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">);</span>
@ -123,6 +129,8 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PROBLEMS_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">RUNTEST</span><span class="plain-syntax">(</span><a href="2-pc.html#SP7" class="function-link"><span class="function-syntax">Coverage::check</span></a><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">KIT_VERSIONS_CLSW:</span><span class="plain-syntax"> </span><a href="2-kv.html#SP1" class="function-link"><span class="function-syntax">KitVersioning::show_versions</span></a><span class="plain-syntax">(); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SYNC_KIT_VERSIONS_CLSW:</span><span class="plain-syntax"> </span><a href="2-kv.html#SP2" class="function-link"><span class="function-syntax">KitVersioning::sync_versions</span></a><span class="plain-syntax">(); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">EXTENSION_VERSIONS_CLSW:</span><span class="plain-syntax"> </span><a href="2-ev.html#SP1" class="function-link"><span class="function-syntax">ExtensionVersioning::show_versions</span></a><span class="plain-syntax">(); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SYNC_EXTENSION_VERSIONS_CLSW:</span><span class="plain-syntax"> </span><a href="2-ev.html#SP2" class="function-link"><span class="function-syntax">ExtensionVersioning::sync_versions</span></a><span class="plain-syntax">(); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SILENCE_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">silence_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">val</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">VERBOSE_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">verbose_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">val</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>

289
docs/inpolicy/2-ev.html Normal file
View file

@ -0,0 +1,289 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Extension Versioning</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>
</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 'Extension Versioning' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="index.html">inpolicy</a></li><li><a href="index.html#2">Chapter 2: Policies</a></li><li><b>Extension Versioning</b></li></ul></div>
<p class="purpose">To ensure that the built-in extensions share version numbers with the core compiler.</p>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>This implements <span class="extract"><span class="extract-syntax">-extension-versions</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">ExtensionVersioning::show_versions</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">ExtensionVersioning::show_versions</span></span>:<br/>Main - <a href="1-mn.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">core_V</span><span class="plain-syntax"> = </span><a href="2-ev.html#SP2" class="function-link"><span class="function-syntax">ExtensionVersioning::simplified_core_version</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"Simplified core version is %v\n"</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">core_V</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ev.html#SP3" class="function-link"><span class="function-syntax">ExtensionVersioning::iterate</span></a><span class="plain-syntax">(</span><a href="../../../inweb/foundation-module/7-vn.html#SP4" class="function-link"><span class="function-syntax">VersionNumbers::null</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>And <span class="extract"><span class="extract-syntax">-sync-extension-versions</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">ExtensionVersioning::sync_versions</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">ExtensionVersioning::sync_versions</span></span>:<br/>Main - <a href="1-mn.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">core_V</span><span class="plain-syntax"> = </span><a href="2-ev.html#SP2" class="function-link"><span class="function-syntax">ExtensionVersioning::simplified_core_version</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"Simplified core version is %v\n"</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">core_V</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ev.html#SP3" class="function-link"><span class="function-syntax">ExtensionVersioning::iterate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">core_V</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionVersioning::simplified_core_version</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">ExtensionVersioning::simplified_core_version</span></span>:<br/><a href="2-ev.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">web_md</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inform7_web</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/8-ws.html#SP5" class="function-link"><span class="function-syntax">WebMetadata::get_without_modules</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">I</span><span class="string-syntax">"inform7"</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">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">inform7_web</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version_number</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax">.</span><span class="element-syntax">prerelease_segments</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">V</span><span class="plain-syntax">.</span><span class="element-syntax">build_metadata</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>Both use the following to work through the built-in kits:
</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">ExtensionVersioning::iterate</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">ExtensionVersioning::iterate</span></span>:<br/><a href="2-ev.html#SP1">&#167;1</a>, <a href="2-ev.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-pth.html#SP5" class="function-link"><span class="function-syntax">Pathnames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"inform7/Internal/Extensions/Graham Nelson"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-drc.html#SP4" class="function-link"><span class="function-syntax">Directories::listing</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-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="reserved-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><a href="../../../inweb/foundation-module/1-wp.html#SP3" class="function-link"><span class="function-syntax">Platform::is_folder_separator</span></a><span class="plain-syntax">(</span><a href="../../../inweb/foundation-module/4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get_last_char</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/4-sm.html#SP25" class="function-link"><span class="function-syntax">Str::delete_last_character</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-pth.html#SP4" class="function-link"><span class="function-syntax">Pathnames::down</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/4-pm.html#SP9" class="function-link"><span class="function-syntax">Regexp::create_mr</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../../../inweb/foundation-module/4-pm.html#SP10" class="function-link"><span class="function-syntax">Regexp::match</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="string-syntax">"(%c+)-v(%d%c*).i7xd"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">raw_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="element-syntax">exp</span><span class="plain-syntax">[0];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">claimed</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/7-vn.html#SP7" class="function-link"><span class="function-syntax">VersionNumbers::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="element-syntax">exp</span><span class="plain-syntax">[1]);</span>
<span class="plain-syntax"> </span><a href="2-ev.html#SP3" class="function-link"><span class="function-syntax">ExtensionVersioning::show_version</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><span class="identifier-syntax">raw_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">claimed</span><span class="plain-syntax">, </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/4-pm.html#SP9" class="function-link"><span class="function-syntax">Regexp::dispose_of</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionVersioning::show_version</span><span class="plain-syntax">(</span><span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">claimed</span><span class="plain-syntax">, </span><span class="reserved-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><a href="2-ev.html#SP4" class="function-link"><span class="function-syntax">ExtensionVersioning::read_version</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">claimed</span><span class="plain-syntax">, </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"Extension %S has version %v\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">V</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>The actual work, then, is done by this function, which returns the version
number of the kit stored at the path <span class="extract"><span class="extract-syntax">kit</span></span>; if <span class="extract"><span class="extract-syntax">set_to</span></span> is other than null,
the kit's version is changed to <span class="extract"><span class="extract-syntax">set_to</span></span>, and this value returned. In both
cases, the kit's JSON metadata file is read in; in the second case, it is
then written back out, modified to include the new version number. (Note
that no file write occurs unless an actual change is needed: if <span class="extract"><span class="extract-syntax">set_to</span></span>
is the same as the version it already has, there's no need to rewrite.)
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionVersioning::read_version</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">ExtensionVersioning::read_version</span></span>:<br/><a href="2-ev.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">claimed</span><span class="plain-syntax">, </span><span class="reserved-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-fln.html#SP2" class="function-link"><span class="function-syntax">Filenames::in</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"extension_metadata.json"</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><a href="../../../inweb/foundation-module/4-tf.html#SP5" class="function-link"><span class="function-syntax">TextFiles::read</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="constant-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="constant-syntax">TRUE</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><a href="2-ev.html#SP5" class="function-link"><span class="function-syntax">ExtensionVersioning::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="reserved-syntax">text_file_position</span><span class="plain-syntax"> </span><span class="identifier-syntax">tfp</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/4-tf.html#SP4" class="function-link"><span class="function-syntax">TextFiles::at</span></a><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="reserved-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">value</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/4-jsn.html#SP11" class="function-link"><span class="function-syntax">JSON::decode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">contents</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">value</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">value</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">JSON_type</span><span class="plain-syntax"> == </span><span class="constant-syntax">ERROR_JSONTYPE</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-em.html#SP6" class="function-link"><span class="function-syntax">Errors::at_position</span></a><span class="plain-syntax">(</span><span class="string-syntax">"Syntax error in metadata file for extension"</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="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/7-vn.html#SP4" class="function-link"><span class="function-syntax">VersionNumbers::null</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">contents</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">is</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/4-jsn.html#SP7" class="function-link"><span class="function-syntax">JSON::look_up_object</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"is"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">is</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-em.html#SP6" class="function-link"><span class="function-syntax">Errors::at_position</span></a><span class="plain-syntax">(</span><span class="string-syntax">"Semantic error in metadata file for extension"</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="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/7-vn.html#SP4" class="function-link"><span class="function-syntax">VersionNumbers::null</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">version</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/4-jsn.html#SP7" class="function-link"><span class="function-syntax">JSON::look_up_object</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">is</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">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/7-vn.html#SP4" class="function-link"><span class="function-syntax">VersionNumbers::null</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">version</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/7-vn.html#SP7" class="function-link"><span class="function-syntax">VersionNumbers::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">version</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">if_string</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../../../inweb/foundation-module/7-vn.html#SP4" class="function-link"><span class="function-syntax">VersionNumbers::is_null</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-em.html#SP6" class="function-link"><span class="function-syntax">Errors::at_position</span></a><span class="plain-syntax">(</span><span class="string-syntax">"Malformed version number in metadata file for extension"</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="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/7-vn.html#SP4" class="function-link"><span class="function-syntax">VersionNumbers::null</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../../../inweb/foundation-module/7-vn.html#SP4" class="function-link"><span class="function-syntax">VersionNumbers::is_null</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">set_to</span><span class="plain-syntax">) == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-ev.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">If necessary impose the new version in metadata file</span><span class="named-paragraph-number">4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-ev.html#SP4_2" class="named-paragraph-link"><span class="named-paragraph">If necessary impose the new version in directory name</span><span class="named-paragraph-number">4.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-ev.html#SP4_3" class="named-paragraph-link"><span class="named-paragraph">If necessary impose the new version in extension header</span><span class="named-paragraph-number">4.3</span></a></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">V</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4_1" class="paragraph-anchor"></a><b>&#167;4.1. </b>The following test used to be just <span class="extract"><span class="extract-syntax">VersionNumbers::ne(set_to, V)</span></span>, but this,
because it properly followed the semver standard, regarded them as equal if they
differed only in the build code &mdash; so <span class="extract"><span class="extract-syntax">10.1.0-beta+6V20</span></span> would not be updated to
<span class="extract"><span class="extract-syntax">10.1.0-beta+6V44</span></span>, for example. We now force a sync if there is any textual
difference at all.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">If necessary impose the new version in metadata file</span><span class="named-paragraph-number">4.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">a</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">b</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">a</span><span class="plain-syntax">, </span><span class="string-syntax">"%v"</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">set_to</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">b</span><span class="plain-syntax">, </span><span class="string-syntax">"%v"</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">V</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../../../inweb/foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::ne</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">a</span><span class="plain-syntax">, </span><span class="identifier-syntax">b</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-ev.html#SP4_1_1" class="named-paragraph-link"><span class="named-paragraph">Change the version to set_to</span><span class="named-paragraph-number">4.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">a</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">b</span><span class="plain-syntax">)</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-ev.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_1_1" class="paragraph-anchor"></a><b>&#167;4.1.1. </b>We change the JSON object for the kit's metadata (at object.is.version), and
then encode the object out as a new version of the file:
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Change the version to set_to</span><span class="named-paragraph-number">4.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="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="plain-syntax"> </span><span class="identifier-syntax">version</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/4-jsn.html#SP4" class="function-link"><span class="function-syntax">JSON::new_string</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/4-jsn.html#SP6" class="function-link"><span class="function-syntax">JSON::add_to_object</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">is</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">version</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"Rewriting %f to impose version number %v (was %v)\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">set_to</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">V</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/4-sm.html#SP15" class="function-link"><span class="function-syntax">Str::clear</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">version</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">if_string</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">version</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">if_string</span><span class="plain-syntax">, </span><span class="string-syntax">"%v"</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">set_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> </span><span class="identifier-syntax">JSON_struct</span><span class="plain-syntax">; </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = &amp;</span><span class="identifier-syntax">JSON_struct</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">STREAM_OPEN_TO_FILE</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="constant-syntax">UTF8_ENC</span><span class="plain-syntax">) == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-em.html#SP2" class="function-link"><span class="function-syntax">Errors::fatal_with_file</span></a><span class="plain-syntax">(</span><span class="string-syntax">"unable to open metadata file for output: %f"</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/4-jsn.html#SP18" class="function-link"><span class="function-syntax">JSON::encode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">STREAM_CLOSE</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-ev.html#SP4_1">&#167;4.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_2" class="paragraph-anchor"></a><b>&#167;4.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">If necessary impose the new version in directory name</span><span class="named-paragraph-number">4.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">correct_name</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">flattened</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">flattened</span><span class="plain-syntax">, </span><span class="string-syntax">"%v"</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">set_to</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">flattened</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../../../inweb/foundation-module/4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">) == </span><span class="character-syntax">'.'</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/4-sm.html#SP14" class="function-link"><span class="function-syntax">Str::put</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="character-syntax">'_'</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">correct_name</span><span class="plain-syntax">, </span><span class="string-syntax">"%S-v%S.i7xd"</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">flattened</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">flattened</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../../../inweb/foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::ne</span></a><span class="plain-syntax">(</span><a href="../../../inweb/foundation-module/3-pth.html#SP7" class="function-link"><span class="function-syntax">Pathnames::directory_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">), </span><span class="identifier-syntax">correct_name</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">XC</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-pth.html#SP4" class="function-link"><span class="function-syntax">Pathnames::down</span></a><span class="plain-syntax">(</span><a href="../../../inweb/foundation-module/3-pth.html#SP7" class="function-link"><span class="function-syntax">Pathnames::up</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">), </span><span class="identifier-syntax">correct_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-pth.html#SP11" class="function-link"><span class="function-syntax">Pathnames::move_directory</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><span class="identifier-syntax">XC</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">X</span><span class="plain-syntax"> = </span><span class="identifier-syntax">XC</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"Renaming directory to %p\n"</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">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">correct_name</span><span class="plain-syntax">)</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-ev.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_3" class="paragraph-anchor"></a><b>&#167;4.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">If necessary impose the new version in extension header</span><span class="named-paragraph-number">4.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">, </span><span class="string-syntax">"%S.i7x"</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-fln.html#SP2" class="function-link"><span class="function-syntax">Filenames::in</span></a><span class="plain-syntax">(</span><a href="../../../inweb/foundation-module/3-pth.html#SP4" class="function-link"><span class="function-syntax">Pathnames::down</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">X</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">leaf</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">leaf</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">source</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/4-tf.html#SP5" class="function-link"><span class="function-syntax">TextFiles::read</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"unable to read file of extension source"</span><span class="plain-syntax">, </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><a href="2-ev.html#SP5" class="function-link"><span class="function-syntax">ExtensionVersioning::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">source</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/4-pm.html#SP9" class="function-link"><span class="function-syntax">Regexp::create_mr</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../../../inweb/foundation-module/4-pm.html#SP10" class="function-link"><span class="function-syntax">Regexp::match</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">source</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="string-syntax">"(Version )(%d%C*?)( of %c*)"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">sourced</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/7-vn.html#SP7" class="function-link"><span class="function-syntax">VersionNumbers::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="element-syntax">exp</span><span class="plain-syntax">[1]);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">a</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">b</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">a</span><span class="plain-syntax">, </span><span class="string-syntax">"%v"</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">set_to</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">b</span><span class="plain-syntax">, </span><span class="string-syntax">"%v"</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">sourced</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../../../inweb/foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::ne</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">a</span><span class="plain-syntax">, </span><span class="identifier-syntax">b</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-ev.html#SP4_3_1" class="named-paragraph-link"><span class="named-paragraph">Change the version in the extension to set_to</span><span class="named-paragraph-number">4.3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">a</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">b</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/4-pm.html#SP9" class="function-link"><span class="function-syntax">Regexp::dispose_of</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">source</span><span class="plain-syntax">)</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-ev.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_3_1" class="paragraph-anchor"></a><b>&#167;4.3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Change the version in the extension to set_to</span><span class="named-paragraph-number">4.3.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"Rewriting opening line of %f\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> </span><span class="identifier-syntax">S_struct</span><span class="plain-syntax">; </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = &amp;</span><span class="identifier-syntax">S_struct</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">STREAM_OPEN_TO_FILE</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="constant-syntax">UTF8_ENC</span><span class="plain-syntax">) == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-em.html#SP2" class="function-link"><span class="function-syntax">Errors::fatal_with_file</span></a><span class="plain-syntax">(</span><span class="string-syntax">"unable to open extension source for output: %f"</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S%v"</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="element-syntax">exp</span><span class="plain-syntax">[0], &amp;</span><span class="identifier-syntax">set_to</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">pos</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="element-syntax">exp</span><span class="plain-syntax">[0]) + </span><a href="../../../inweb/foundation-module/4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="element-syntax">exp</span><span class="plain-syntax">[1]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=</span><span class="identifier-syntax">pos</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><a href="../../../inweb/foundation-module/4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">source</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">(</span><a href="../../../inweb/foundation-module/4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">source</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">STREAM_CLOSE</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-ev.html#SP4_3">&#167;4.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ExtensionVersioning::read_metadata_file_helper</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">ExtensionVersioning::read_metadata_file_helper</span></span>:<br/><a href="2-ev.html#SP4">&#167;4</a>, <a href="2-ev.html#SP4_3">&#167;4.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="reserved-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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">contents</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">v_state</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">contents</span><span class="plain-syntax">, </span><span class="string-syntax">"%S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">text</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-kv.html">&#10094;</a></li><li class="progresschapter"><a href="M-ui.html">M</a></li><li class="progresschapter"><a href="1-bsc.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-pc.html">pc</a></li><li class="progresssection"><a href="2-kv.html">kv</a></li><li class="progresscurrent">ev</li><li class="progressnextoff">&#10095;</li></ul></div>
</nav><!--End of weave-->
</main>
</body>
</html>

View file

@ -87,16 +87,39 @@ function togglePopup(material_id) {
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">KitVersioning::iterate</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">KitVersioning::iterate</span></span>:<br/><a href="2-kv.html#SP1">&#167;1</a>, <a href="2-kv.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-kv.html#SP3" class="function-link"><span class="function-syntax">KitVersioning::show_version</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"WorldModelKit"</span><span class="plain-syntax">, </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-kv.html#SP3" class="function-link"><span class="function-syntax">KitVersioning::show_version</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"EnglishLanguageKit"</span><span class="plain-syntax">, </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-kv.html#SP3" class="function-link"><span class="function-syntax">KitVersioning::show_version</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"CommandParserKit"</span><span class="plain-syntax">, </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-kv.html#SP3" class="function-link"><span class="function-syntax">KitVersioning::show_version</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"BasicInformKit"</span><span class="plain-syntax">, </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-kv.html#SP3" class="function-link"><span class="function-syntax">KitVersioning::show_version</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"Architecture16Kit"</span><span class="plain-syntax">, </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-kv.html#SP3" class="function-link"><span class="function-syntax">KitVersioning::show_version</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"Architecture32Kit"</span><span class="plain-syntax">, </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-pth.html#SP5" class="function-link"><span class="function-syntax">Pathnames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"inform7/Internal/Inter"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-kv.html#SP3" class="function-link"><span class="function-syntax">KitVersioning::show_version</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"WorldModelKit"</span><span class="plain-syntax">, </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-kv.html#SP3" class="function-link"><span class="function-syntax">KitVersioning::show_version</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"CommandParserKit"</span><span class="plain-syntax">, </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-kv.html#SP3" class="function-link"><span class="function-syntax">KitVersioning::show_version</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"BasicInformKit"</span><span class="plain-syntax">, </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-kv.html#SP3" class="function-link"><span class="function-syntax">KitVersioning::show_version</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"DialogueKit"</span><span class="plain-syntax">, </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-kv.html#SP3" class="function-link"><span class="function-syntax">KitVersioning::show_version</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Architecture16Kit"</span><span class="plain-syntax">, </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-kv.html#SP3" class="function-link"><span class="function-syntax">KitVersioning::show_version</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Architecture32Kit"</span><span class="plain-syntax">, </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><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">I</span><span class="string-syntax">"inform7/Internal/Extensions/Graham Nelson"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-kv.html#SP3" class="function-link"><span class="function-syntax">KitVersioning::iterate_through</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><span class="identifier-syntax">set_to</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">KitVersioning::show_version</span><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="reserved-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-pth.html#SP5" class="function-link"><span class="function-syntax">Pathnames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"inform7/Internal/Inter"</span><span class="plain-syntax">);</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">KitVersioning::iterate_through</span><span class="plain-syntax">(</span><span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="reserved-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-drc.html#SP4" class="function-link"><span class="function-syntax">Directories::listing</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-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="reserved-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><a href="../../../inweb/foundation-module/1-wp.html#SP3" class="function-link"><span class="function-syntax">Platform::is_folder_separator</span></a><span class="plain-syntax">(</span><a href="../../../inweb/foundation-module/4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get_last_char</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/4-sm.html#SP25" class="function-link"><span class="function-syntax">Str::delete_last_character</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-pth.html#SP4" class="function-link"><span class="function-syntax">Pathnames::down</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</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">X</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-pth.html#SP4" class="function-link"><span class="function-syntax">Pathnames::down</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Materials"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">X</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-pth.html#SP4" class="function-link"><span class="function-syntax">Pathnames::down</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Inter"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L2</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-drc.html#SP4" class="function-link"><span class="function-syntax">Directories::listing</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kit</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">kit</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax">, </span><span class="identifier-syntax">L2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../../../inweb/foundation-module/1-wp.html#SP3" class="function-link"><span class="function-syntax">Platform::is_folder_separator</span></a><span class="plain-syntax">(</span><a href="../../../inweb/foundation-module/4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get_last_char</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">kit</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/4-sm.html#SP25" class="function-link"><span class="function-syntax">Str::delete_last_character</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">kit</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-kv.html#SP3" class="function-link"><span class="function-syntax">KitVersioning::show_version</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><span class="identifier-syntax">kit</span><span class="plain-syntax">, </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">KitVersioning::show_version</span><span class="plain-syntax">(</span><span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="reserved-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-pth.html#SP4" class="function-link"><span class="function-syntax">Pathnames::down</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><a href="2-kv.html#SP4" class="function-link"><span class="function-syntax">KitVersioning::read_version</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">set_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"Kit %S has version %v\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">V</span><span class="plain-syntax">);</span>
@ -198,7 +221,7 @@ then encode the object out as a new version of the file:
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-pc.html">&#10094;</a></li><li class="progresschapter"><a href="M-ui.html">M</a></li><li class="progresschapter"><a href="1-bsc.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-pc.html">pc</a></li><li class="progresscurrent">kv</li><li class="progressnextoff">&#10095;</li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="2-pc.html">&#10094;</a></li><li class="progresschapter"><a href="M-ui.html">M</a></li><li class="progresschapter"><a href="1-bsc.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-pc.html">pc</a></li><li class="progresscurrent">kv</li><li class="progresssection"><a href="2-ev.html">ev</a></li><li class="progressnext"><a href="2-ev.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -84,7 +84,7 @@ set of Inform test cases.
<span class="plain-syntax"> </span><span class="constant-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">known_problem</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure known_problem is accessed in 2/trs, 4/prp, 4/jsn, 5/mrk, 5/mv, 5/im and here.</li></ul>
<ul class="endnotetexts"><li>The structure known_problem is accessed in 2/trs, 4/prp, 4/jsn, 5/mrk, 5/mv, 5/im, 7/ld and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>When a problem is observed, we create a dictionary entry for it, if necessary,
and augment its bitmap of known contexts:
</p>
@ -321,7 +321,7 @@ messages:
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="1-mn.html">&#10094;</a></li><li class="progresschapter"><a href="M-ui.html">M</a></li><li class="progresschapter"><a href="1-bsc.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresscurrent">pc</li><li class="progresssection"><a href="2-kv.html">kv</a></li><li class="progressnext"><a href="2-kv.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="1-mn.html">&#10094;</a></li><li class="progresschapter"><a href="M-ui.html">M</a></li><li class="progresschapter"><a href="1-bsc.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresscurrent">pc</li><li class="progresssection"><a href="2-kv.html">kv</a></li><li class="progresssection"><a href="2-ev.html">ev</a></li><li class="progressnext"><a href="2-kv.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -58,19 +58,21 @@
<span class="plain-syntax">usage: inpolicy [options]</span>
<span class="plain-syntax">-check-problems check problem test case coverage</span>
<span class="plain-syntax">-kit-versions show version numbers of the built-in kits</span>
<span class="plain-syntax">-silence print nothing unless there's something wrong (default is -no-silence)</span>
<span class="plain-syntax">-sync-kit-versions fix version numbers of the built-in kits to match core inform7 version</span>
<span class="plain-syntax">-verbose explain what inpolicy is doing (default is -no-verbose)</span>
<span class="plain-syntax">-check-problems check problem test case coverage</span>
<span class="plain-syntax">-extension-versions show version numbers of the built-in extensions</span>
<span class="plain-syntax">-kit-versions show version numbers of the built-in kits</span>
<span class="plain-syntax">-silence print nothing unless there's something wrong (default is -no-silence)</span>
<span class="plain-syntax">-sync-extension-versions fix version numbers of the built-in extensions to match core inform7 version</span>
<span class="plain-syntax">-sync-kit-versions fix version numbers of the built-in kits to match core inform7 version</span>
<span class="plain-syntax">-verbose explain what inpolicy is doing (default is -no-verbose)</span>
<span class="plain-syntax">-at X specify that this tool is installed at X</span>
<span class="plain-syntax">-crash intentionally crash on internal errors, for backtracing (default is -no-crash)</span>
<span class="plain-syntax">-fixtime pretend the time is 11 a.m. on 28 March 2016 for testing (default is -no-fixtime)</span>
<span class="plain-syntax">-help print this help information</span>
<span class="plain-syntax">-locale X set locales as 'L=E', L being shell or console, E platform, utf-8 or iso-latin1</span>
<span class="plain-syntax">-log X write the debugging log to include diagnostics on X</span>
<span class="plain-syntax">-version print out version number</span>
<span class="plain-syntax">-at X specify that this tool is installed at X</span>
<span class="plain-syntax">-crash intentionally crash on internal errors, for backtracing (default is -no-crash)</span>
<span class="plain-syntax">-fixtime pretend the time is 11 a.m. on 28 March 2016 for testing (default is -no-fixtime)</span>
<span class="plain-syntax">-help print this help information</span>
<span class="plain-syntax">-locale X set locales as 'L=E', L being shell or console, E platform, utf-8 or iso-latin1</span>
<span class="plain-syntax">-log X write the debugging log to include diagnostics on X</span>
<span class="plain-syntax">-version print out version number</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="M-ui.html">&#10094;</a></li><li class="progresscurrentchapter">M</li><li class="progresssection"><a href="M-ui.html">ui</a></li><li class="progresscurrent">rc</li><li class="progresschapter"><a href="1-bsc.html">1</a></li><li class="progresschapter"><a href="2-pc.html">2</a></li><li class="progressnext"><a href="1-bsc.html">&#10095;</a></li></ul></div>

View file

@ -94,6 +94,11 @@
<spon class="sectiontitle">Kit Versioning</span></a> -
<span class="sectionpurpose">To ensure that the built-in kits share version numbers with the core compiler.</span></p>
</li>
<li>
<p class="sectionentry"><a href="2-ev.html">
<spon class="sectiontitle">Extension Versioning</span></a> -
<span class="sectionpurpose">To ensure that the built-in extensions share version numbers with the core compiler.</span></p>
</li>
</ul>
</li>
</ul>

View file

@ -181,7 +181,7 @@ number of successes.
</li></ul>
<pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">Size of lexicon: 3223 excerpt meanings</span>
<span class="plain-syntax"> Stored among 860 words out of total vocabulary of 10707</span>
<span class="plain-syntax"> Stored among 860 words out of total vocabulary of 10708</span>
<span class="plain-syntax"> 724 words have a start list: longest belongs to report (with 296 meanings)</span>
<span class="plain-syntax"> 21 words have an end list: longest belongs to digits (with 7 meanings)</span>
<span class="plain-syntax"> 29 words have a middle list: longest belongs to matches (with 6 meanings)</span>

View file

@ -85,7 +85,7 @@ we can give a semantic version number range:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="function-syntax">Requirements::any_version_of</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">Requirements::any_version_of</span></span>:<br/>Inter Skill - <a href="3-is.html#SP3">&#167;3</a>, <a href="3-is.html#SP4">&#167;4</a><br/>Extension Services - <a href="5-es.html#SP2_4_3_1_2">&#167;2.4.3.1.2</a>, <a href="5-es.html#SP2_4_3_2_2">&#167;2.4.3.2.2</a>, <a href="5-es.html#SP2_6">&#167;2.6</a><br/>Kit Services - <a href="5-ks.html#SP5_3_1_2">&#167;5.3.1.2</a>, <a href="5-ks.html#SP8">&#167;8</a><br/>Language Services - <a href="5-ls.html#SP7">&#167;7</a>, <a href="5-ls.html#SP10">&#167;10</a><br/>Project Services - <a href="5-ps2.html#SP18">&#167;18</a>, <a href="5-ps2.html#SP21">&#167;21</a>, <a href="5-ps2.html#SP23_1">&#167;23.1</a><br/>Inclusions - <a href="6-inc.html#SP6_1_2">&#167;6.1.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="function-syntax">Requirements::any_version_of</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">Requirements::any_version_of</span></span>:<br/>Inter Skill - <a href="3-is.html#SP3">&#167;3</a>, <a href="3-is.html#SP4">&#167;4</a><br/>Extension Services - <a href="5-es.html#SP2_4_3_1_2">&#167;2.4.3.1.2</a>, <a href="5-es.html#SP2_4_3_2_2">&#167;2.4.3.2.2</a>, <a href="5-es.html#SP2_6">&#167;2.6</a><br/>Kit Services - <a href="5-ks.html#SP5_3_1_2">&#167;5.3.1.2</a>, <a href="5-ks.html#SP8">&#167;8</a><br/>Language Services - <a href="5-ls.html#SP10">&#167;10</a><br/>Project Services - <a href="5-ps2.html#SP18">&#167;18</a>, <a href="5-ps2.html#SP21">&#167;21</a>, <a href="5-ps2.html#SP23_1">&#167;23.1</a><br/>Inclusions - <a href="6-inc.html#SP6_1_2">&#167;6.1.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-rqr.html#SP2" class="function-link"><span class="function-syntax">Requirements::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">work</span><span class="plain-syntax">, </span><span class="identifier-syntax">VersionNumberRanges::any_range</span><span class="plain-syntax">());</span>
<span class="plain-syntax">}</span>

View file

@ -94,7 +94,7 @@ not subsequently altered.
<span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="function-syntax">Works::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">Works::new</span></span>:<br/><a href="2-wrk.html#SP11">&#167;11</a><br/>Requirements - <a href="2-rqr.html#SP2">&#167;2</a><br/>Inter Skill - <a href="3-is.html#SP3">&#167;3</a>, <a href="3-is.html#SP4">&#167;4</a><br/>Extension Manager - <a href="4-em.html#SP4">&#167;4</a><br/>Language Manager - <a href="4-lm.html#SP3">&#167;3</a><br/>Project Bundle Manager - <a href="4-pbm.html#SP2">&#167;2</a><br/>Project File Manager - <a href="4-pfm.html#SP2">&#167;2</a><br/>Template Manager - <a href="4-tm.html#SP3">&#167;3</a><br/>Extension Services - <a href="5-es.html#SP2_4_3_1">&#167;2.4.3.1</a>, <a href="5-es.html#SP2_4_3_2">&#167;2.4.3.2</a>, <a href="5-es.html#SP2_6">&#167;2.6</a><br/>Kit Services - <a href="5-ks.html#SP5_3_1">&#167;5.3.1</a>, <a href="5-ks.html#SP8">&#167;8</a><br/>Language Services - <a href="5-ls.html#SP10">&#167;10</a><br/>Project Services - <a href="5-ps2.html#SP18">&#167;18</a><br/>Headings - <a href="6-hdn.html#SP12_3">&#167;12.3</a><br/>Inclusions - <a href="6-inc.html#SP5_1">&#167;5.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_genre</span><span class="plain-syntax"> *</span><span class="identifier-syntax">genre</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ti</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</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-wrk.html#SP3" class="function-link"><span class="function-syntax">Works::new_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">genre</span><span class="plain-syntax">, </span><span class="identifier-syntax">ti</span><span class="plain-syntax">, </span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="function-syntax">Works::new_raw</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">Works::new_raw</span></span>:<br/>Extension Bundle Manager - <a href="4-ebm.html#SP3">&#167;3</a><br/>Kit Manager - <a href="4-km.html#SP3">&#167;3</a><br/>Pipeline Manager - <a href="4-pm.html#SP4">&#167;4</a><br/>Extension Services - <a href="5-es.html#SP2_3">&#167;2.3</a><br/>Language Services - <a href="5-ls.html#SP7">&#167;7</a><br/>Project Services - <a href="5-ps2.html#SP21">&#167;21</a>, <a href="5-ps2.html#SP23_1">&#167;23.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_genre</span><span class="plain-syntax"> *</span><span class="identifier-syntax">genre</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ti</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="function-syntax">Works::new_raw</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">Works::new_raw</span></span>:<br/>Extension Bundle Manager - <a href="4-ebm.html#SP3">&#167;3</a><br/>Kit Manager - <a href="4-km.html#SP3">&#167;3</a><br/>Pipeline Manager - <a href="4-pm.html#SP4">&#167;4</a><br/>Extension Services - <a href="5-es.html#SP2_3">&#167;2.3</a><br/>Project Services - <a href="5-ps2.html#SP21">&#167;21</a>, <a href="5-ps2.html#SP23_1">&#167;23.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_genre</span><span class="plain-syntax"> *</span><span class="identifier-syntax">genre</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ti</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</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-wrk.html#SP3" class="function-link"><span class="function-syntax">Works::new_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">genre</span><span class="plain-syntax">, </span><span class="identifier-syntax">ti</span><span class="plain-syntax">, </span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>

View file

@ -216,20 +216,13 @@ detect the language of play for a story file without actually running it.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">supports</span><span class="plain-syntax">[</span><span class="identifier-syntax">S</span><span class="plain-syntax">];</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. Kit. </b>Each language needs its own kit of Inter code, if it is going to be used as
a language of play. The following is called only when `L` is the language of
play for `project`:
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. Kit. </b>At one time, the language of play added a kit dependency here. That's now
handled differently, in that the kit in question (`FrenchLanguageKit`, say)
should now be included in the `French Language` extension.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Languages::add_kit_dependencies_to_project</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">Languages::add_kit_dependencies_to_project</span></span>:<br/>Project Services - <a href="5-ps2.html#SP23_1">&#167;23.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">project</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no language"</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">kitname</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">kitname</span><span class="plain-syntax">, </span><span class="string-syntax">"%SLanguageKit"</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax"> = </span><a href="2-wrk.html#SP2" class="function-link"><span class="function-syntax">Works::new_raw</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">kit_genre</span><span class="plain-syntax">, </span><span class="identifier-syntax">kitname</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax"> = </span><a href="2-rqr.html#SP2" class="function-link"><span class="function-syntax">Requirements::any_version_of</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">work</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-ps2.html#SP21" class="function-link"><span class="function-syntax">Projects::add_kit_dependency</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">, </span><span class="identifier-syntax">kitname</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">kitname</span><span class="plain-syntax">)</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. Finding by name. </b>Given the name of a natural language (e.g., "German") we find the

View file

@ -634,7 +634,7 @@ at least one kit, and probably several.
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::add_kit_dependency</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">Projects::add_kit_dependency</span></span>:<br/><a href="5-ps2.html#SP23_1">&#167;23.1</a>, <a href="5-ps2.html#SP33">&#167;33</a><br/>Extension Services - <a href="5-es.html#SP9">&#167;9</a><br/>Kit Services - <a href="5-ks.html#SP9">&#167;9</a><br/>Language Services - <a href="5-ls.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">project</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kit_name</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::add_kit_dependency</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">Projects::add_kit_dependency</span></span>:<br/><a href="5-ps2.html#SP23_1">&#167;23.1</a>, <a href="5-ps2.html#SP33">&#167;33</a><br/>Extension Services - <a href="5-es.html#SP9">&#167;9</a><br/>Kit Services - <a href="5-ks.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">project</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kit_name</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">because_of_language</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_kit</span><span class="plain-syntax"> *</span><span class="identifier-syntax">because_of_kit</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nests</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-ps2.html#SP22" class="function-link"><span class="function-syntax">Projects::uses_kit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">, </span><span class="identifier-syntax">kit_name</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>

View file

@ -2,7 +2,6 @@
status "inform7/Internal/HTML/CblorbModel.html" "/Users/gnelson/Natural Inform/intest/Workspace/T1/Example.inform/Build/StatusCblorb.html"
! Identification
project folder "/Users/gnelson/Natural Inform/intest/Workspace/T1/Example.inform"

View file

@ -2,7 +2,6 @@
status "inform7/Internal/HTML/CblorbModel.html" "/Users/gnelson/Natural Inform/intest/Workspace/T0/Example.inform/Build/StatusCblorb.html"
! Identification
project folder "/Users/gnelson/Natural Inform/intest/Workspace/T0/Example.inform"

View file

@ -2,7 +2,6 @@
status "inform7/Internal/HTML/CblorbModel.html" "/Users/gnelson/Natural Inform/intest/Workspace/T2/Example.inform/Build/StatusCblorb.html"
! Identification
project folder "/Users/gnelson/Natural Inform/intest/Workspace/T2/Example.inform"

View file

@ -2,7 +2,6 @@
status "inform7/Internal/HTML/CblorbModel.html" "/Users/gnelson/Natural Inform/intest/Workspace/T5/Example.inform/Build/StatusCblorb.html"
! Identification
project folder "/Users/gnelson/Natural Inform/intest/Workspace/T5/Example.inform"

View file

@ -2,7 +2,6 @@
status "inform7/Internal/HTML/CblorbModel.html" "/Users/gnelson/Natural Inform/intest/Workspace/T3/Example.inform/Build/StatusCblorb.html"
! Identification
project folder "/Users/gnelson/Natural Inform/intest/Workspace/T3/Example.inform"

View file

@ -2,7 +2,6 @@
status "inform7/Internal/HTML/CblorbModel.html" "/Users/gnelson/Natural Inform/intest/Workspace/T4/Example.inform/Build/StatusCblorb.html"
! Identification
project folder "/Users/gnelson/Natural Inform/intest/Workspace/T4/Example.inform"

View file

@ -151,19 +151,12 @@ int Languages::supports(inform_language *L, int S) {
}
@h Kit.
Each language needs its own kit of Inter code, if it is going to be used as
a language of play. The following is called only when `L` is the language of
play for `project`:
At one time, the language of play added a kit dependency here. That's now
handled differently, in that the kit in question (`FrenchLanguageKit`, say)
should now be included in the `French Language` extension.
=
void Languages::add_kit_dependencies_to_project(inform_language *L, inform_project *project) {
if (L == NULL) internal_error("no language");
TEMPORARY_TEXT(kitname)
WRITE_TO(kitname, "%SLanguageKit", L->as_copy->edition->work->title);
inbuild_work *work = Works::new_raw(kit_genre, kitname, I"");
inbuild_requirement *req = Requirements::any_version_of(work);
Projects::add_kit_dependency(project, kitname, L, NULL, req, NULL);
DISCARD_TEXT(kitname)
}
@h Finding by name.

2
inform7/.gitignore vendored
View file

@ -44,6 +44,6 @@ Internal/Inter/Architecture32Kit/*.interb
Internal/Inter/BasicInformKit/*.interb
Internal/Inter/CommandParserKit/*.interb
Internal/Inter/DialogueKit/*.interb
Internal/Inter/EnglishLanguageKit/*.interb
Internal/Extensions/Graham Nelson/English*/Materials/Inter/EnglishLanguageKit/*.interb
Internal/Inter/WorldModelKit/*.interb

View file

@ -1,5 +1,5 @@
Size of lexicon: 3223 excerpt meanings
Stored among 860 words out of total vocabulary of 10707
Stored among 860 words out of total vocabulary of 10708
724 words have a start list: longest belongs to report (with 296 meanings)
21 words have an end list: longest belongs to digits (with 7 meanings)
29 words have a middle list: longest belongs to matches (with 6 meanings)

View file

@ -1,6 +1,6 @@
<preform-nonterminal> internal nti 30 constraint (none) extremes [1, 1]
<if-start-of-paragraph> internal hits 1386/8922 nti 6 constraint (none) extremes [0, 0]
<if-start-of-paragraph> internal hits 1385/8920 nti 6 constraint (none) extremes [0, 0]
<if-not-cap> internal hits 4088/8336 nti 7 constraint (none) extremes [0, 0]
@ -16,7 +16,7 @@
<any-integer> internal nti 9 constraint (none) extremes [1, 1]
<quoted-text> internal hits 3001/26280 nti 10 constraint (none) extremes [1, 1]
<quoted-text> internal hits 3001/26278 nti 10 constraint (none) extremes [1, 1]
<quoted-text-with-subs> internal nti 11 constraint (none) extremes [1, 1]
@ -24,7 +24,7 @@
<empty-text> internal nti 13 constraint (none) extremes [1, 1]
<if-start-of-source-text> internal hits 2/13936 nti 14 constraint (none) extremes [0, 0]
<if-start-of-source-text> internal hits 2/13930 nti 14 constraint (none) extremes [0, 0]
<list-or-division> hits 0/18 nti 16 constraint DS = {16} extremes [3, infinity)
English:
@ -4743,7 +4743,7 @@
<article> internal hits 16904/103322 nti r2 constraint (none) extremes [1, 1]
<definite-article> internal hits 20830/245360 nti r2 constraint (none) extremes [1, 1]
<definite-article> internal hits 20830/245358 nti r2 constraint (none) extremes [1, 1]
<indefinite-article> internal hits 2481/44294 nti r2 constraint (none) extremes [1, 1]
@ -5446,33 +5446,33 @@
<natural-language> internal nti 20 constraint (none) extremes [1, infinity)
<dividing-sentence> hits 221/11016 nti 21 constraint DW = {12, 13} extremes [2, infinity)
<dividing-sentence> hits 221/11014 nti 21 constraint DW = {12, 13} extremes [2, infinity)
English:
<if-start-of-paragraph> <heading>
(hits 213/4447) (matched long text) constraint DS = {12} extremes [2, infinity)
(hits 213/4446) (matched long text) constraint DS = {12} extremes [2, infinity)
<extension-end-marker-sentence>
(hits 8/4112) (matched long text) constraint DS = {13} extremes [3, infinity)
<heading> hits 213/2744 nti 12 constraint DS = {12} extremes [2, infinity)
<heading> hits 213/2742 nti 12 constraint DS = {12} extremes [2, infinity)
English:
volume {...}
(hits 6/1372) (matched long text) constraint DS = {12} extremes [2, infinity)
(hits 6/1371) (matched long text) constraint DS = {12} extremes [2, infinity)
book {...}
(hits 0/1366) constraint DS = {12} extremes [2, infinity)
(hits 0/1365) constraint DS = {12} extremes [2, infinity)
part {...}
(hits 15/1366) (matched: 'part two - the physical world model') constraint DS = {12} extremes [2, infinity)
(hits 15/1365) (matched: 'part two - the physical world model') constraint DS = {12} extremes [2, infinity)
chapter {...}
(hits 25/1351) (matched long text) constraint DS = {12} extremes [2, infinity)
(hits 25/1350) (matched long text) constraint DS = {12} extremes [2, infinity)
section {...} ( dialog )
(hits 0/1211) constraint DS = {12} extremes [5, infinity)
(hits 0/1210) constraint DS = {12} extremes [5, infinity)
section {...} ( dialogue )
(hits 0/1211) constraint DS = {12} extremes [5, infinity)
(hits 0/1210) constraint DS = {12} extremes [5, infinity)
section {...} ( dialog during {...} )
(hits 0/1025) constraint DS = {12} extremes [7, infinity)
section {...} ( dialogue during {...} )
(hits 0/1025) constraint DS = {12} extremes [7, infinity)
section {...}
(hits 167/1326) (matched long text) constraint DS = {12} extremes [2, infinity)
(hits 167/1325) (matched long text) constraint DS = {12} extremes [2, infinity)
<extension-end-marker-sentence> hits 8/8224 nti 13 constraint DS = {13} extremes [3, infinity)
English:
@ -5481,30 +5481,30 @@
{...} end/ends here
(hits 4/4108) (matched: 'the standard rules end here') constraint DS = {13} extremes [3, infinity)
<structural-sentence> hits 32/13936 nti 15 constraint (none) extremes [1, infinity)
<structural-sentence> hits 29/13930 nti 15 constraint (none) extremes [1, infinity)
English:
<if-start-of-source-text> <quoted-text>
(hits 0/20) constraint (none) extremes [1, 1]
<if-start-of-source-text> <quoted-text> {...}
(hits 0/6948) constraint (none) extremes [2, infinity)
(hits 0/6945) constraint (none) extremes [2, infinity)
<language-modifying-sentence>
(hits 0/6769) constraint DS = {14} extremes [4, infinity)
(hits 0/6766) constraint DS = {14} extremes [4, infinity)
*
constraint CS = {15} extremes [1, 1]
* <quoted-text-without-subs>
constraint DS = {15} extremes [2, 2]
<if-start-of-paragraph> table {...}
(hits 14/6768) (matched long text) constraint DS = {15} extremes [2, infinity)
(hits 14/6766) (matched long text) constraint DS = {15} extremes [2, infinity)
<if-start-of-paragraph> equation {...}
(hits 0/6754) constraint DS = {15} extremes [2, infinity)
(hits 0/6752) constraint DS = {15} extremes [2, infinity)
include the {...} by {...}
(hits 0/6747) constraint DS = {15} extremes [5, infinity)
(hits 0/6745) constraint DS = {15} extremes [5, infinity)
include {...} by {...}
(hits 18/6754) (matched long text) constraint DS = {15} extremes [4, infinity)
(hits 15/6752) (matched long text) constraint DS = {15} extremes [4, infinity)
include (- {...}
(hits 0/6736) constraint DS = {15} extremes [3, infinity)
(hits 0/6737) constraint DS = {15} extremes [3, infinity)
<comma-divisible-sentence> hits 9/2942 nti 16 constraint DS = {16} extremes [2, infinity)
<comma-divisible-sentence> hits 9/2940 nti 16 constraint DS = {16} extremes [2, infinity)
English:
instead of {...}
(hits 0/1429) constraint DS = {16} extremes [3, infinity)
@ -5517,12 +5517,12 @@
when {...}
(hits 4/1424) (matched: 'when scene begins is a scene based rulebook') constraint DS = {16} extremes [2, infinity)
<language-modifying-sentence> hits 0/13538 nti 14 constraint DS = {14} extremes [4, infinity)
<language-modifying-sentence> hits 0/13532 nti 14 constraint DS = {14} extremes [4, infinity)
English:
include (- {###} in the preform grammar
(hits 0/126) constraint DS = {14} extremes [7, 7]
use {...} language element/elements
(hits 0/6769) constraint DS = {14} extremes [4, infinity)
(hits 0/6766) constraint DS = {14} extremes [4, infinity)
<heading-qualifier> hits 36/480 nti 22 constraint DS = {22} extremes [2, infinity)
English:
@ -5624,30 +5624,30 @@
{......}
constraint (none) extremes [1, infinity)
<extension-title-and-version> hits 10/20 nti 27 constraint (none) extremes [1, infinity)
<extension-title-and-version> hits 9/18 nti 27 constraint (none) extremes [1, infinity)
English:
version <extension-version> of <definite-article> <extension-unversioned>
(hits 1/3) (matched: 'version 7 of the standard rules') constraint DS = {27} extremes [5, infinity)
version <extension-version> of <extension-unversioned>
(hits 3/3) (matched: 'version 2 of basic inform') constraint DS = {27} extremes [4, infinity)
<definite-article> <extension-unversioned>
(hits 0/5) constraint (none) extremes [2, infinity)
(hits 0/4) constraint (none) extremes [2, infinity)
<extension-unversioned>
(hits 6/6) (matched: 'basic inform') constraint (none) extremes [1, infinity)
(hits 5/5) (matched: 'basic inform') constraint (none) extremes [1, infinity)
<extension-unversioned> hits 10/20 nti 26 constraint (none) extremes [1, infinity)
<extension-unversioned> hits 9/18 nti 26 constraint (none) extremes [1, infinity)
English:
<extension-unversioned-inner> ( {...} )
constraint DS = {26} extremes [4, infinity)
<extension-unversioned-inner>
(hits 10/10) (matched: 'basic inform') constraint (none) extremes [1, infinity)
(hits 9/9) (matched: 'basic inform') constraint (none) extremes [1, infinity)
<extension-unversioned-inner> hits 10/20 nti 25 constraint (none) extremes [1, infinity)
<extension-unversioned-inner> hits 9/18 nti 25 constraint (none) extremes [1, infinity)
English:
<quoted-text> {***}
(hits 0/10) constraint (none) extremes [1, infinity)
(hits 0/9) constraint (none) extremes [1, infinity)
{...}
(hits 10/10) (matched: 'basic inform') constraint (none) extremes [1, infinity)
(hits 9/9) (matched: 'basic inform') constraint (none) extremes [1, infinity)
<extension-version> internal hits 6/12 nti 26 constraint (none) extremes [1, 1]

View file

@ -1,14 +1,14 @@
Total memory consumption was 144279K = 141 MB
Total memory consumption was 144469K = 141 MB
---- was used for 2178458 objects, in 383866 frames in 0 x 800K = 0K = 0 MB:
---- was used for 2179537 objects, in 384351 frames in 0 x 800K = 0K = 0 MB:
29.2% inter_tree_node_array 60 x 8192 = 491520 objects, 43255680 bytes
20.0% text_stream_array 5252 x 100 = 525200 objects, 29579264 bytes
18.1% linked_list 47862 objects, 26802720 bytes
9.8% inter_symbol_array 136 x 1024 = 139264 objects, 14487808 bytes
20.0% text_stream_array 5258 x 100 = 525800 objects, 29613056 bytes
18.1% linked_list 47996 objects, 26877760 bytes
9.7% inter_symbol_array 136 x 1024 = 139264 objects, 14487808 bytes
9.4% inter_error_stash_array 107 x 1024 = 109568 objects, 14028128 bytes
7.2% parse_node 134156 objects, 10732480 bytes
7.2% scan_directory 2581 objects, 10654368 bytes
7.4% scan_directory 2675 objects, 11042400 bytes
7.2% parse_node 134155 objects, 10732400 bytes
5.1% verb_conjugation 165 objects, 7657320 bytes
3.8% parse_node_annotation_array 358 x 500 = 179000 objects, 5739456 bytes
2.3% pcalc_prop_array 26 x 1000 = 26000 objects, 3536832 bytes
@ -35,7 +35,7 @@ Total memory consumption was 144279K = 141 MB
0.4% unary_predicate_array 17 x 1000 = 17000 objects, 680544 bytes
0.3% local_variable_array 50 x 100 = 5000 objects, 481600 bytes
0.2% verb_usage 1148 objects, 394912 bytes
0.2% dictionary 7844 objects, 376512 bytes
0.2% dictionary 7849 objects, 376752 bytes
0.2% rule 480 objects, 376320 bytes
0.2% verb_form 388 objects, 350752 bytes
0.1% noun 2414 objects, 289680 bytes
@ -64,10 +64,10 @@ Total memory consumption was 144279K = 141 MB
---- lexical_cluster 2556 objects, 81792 bytes
---- kind_variable_declaration 1662 objects, 79776 bytes
---- rulebook 410 objects, 78720 bytes
---- filename 1730 objects, 69200 bytes
---- pathname 1691 objects, 67640 bytes
---- spatial_data 688 objects, 66048 bytes
---- filename 1645 objects, 65800 bytes
---- linked_list_item_array 4 x 1000 = 4000 objects, 64128 bytes
---- pathname 1575 objects, 63000 bytes
---- actions_rcd_data 1966 objects, 62912 bytes
---- scenes_rcd_data 1966 objects, 62912 bytes
---- booking 872 objects, 62784 bytes
@ -90,8 +90,8 @@ Total memory consumption was 144279K = 141 MB
---- shared_variable_access_list_array 12 x 100 = 1200 objects, 38784 bytes
---- parsing_data 688 objects, 38528 bytes
---- production_list 630 objects, 35280 bytes
---- regions_data 688 objects, 33024 bytes
---- counting_data 688 objects, 33024 bytes
---- regions_data 688 objects, 33024 bytes
---- property_permission 97 objects, 31816 bytes
---- stack_frame_box 307 objects, 29472 bytes
---- verb_sense 408 objects, 29376 bytes
@ -99,9 +99,9 @@ Total memory consumption was 144279K = 141 MB
---- action_pattern_array 7 x 100 = 700 objects, 28224 bytes
---- open_source_licence 648 objects, 25920 bytes
---- shared_variable_set_array 6 x 100 = 600 objects, 24192 bytes
---- JSON_value 265 objects, 23320 bytes
---- property 150 objects, 22800 bytes
---- backdrops_data 688 objects, 22016 bytes
---- JSON_value 249 objects, 21912 bytes
---- nonlocal_variable 99 objects, 21384 bytes
---- inter_node_list 656 objects, 20992 bytes
---- action_name 91 objects, 20384 bytes
@ -113,8 +113,8 @@ Total memory consumption was 144279K = 141 MB
---- pcalc_prop_deferral 86 objects, 17888 bytes
---- to_phrase_request 63 objects, 17136 bytes
---- understanding_reference_array 2 x 100 = 200 objects, 16064 bytes
---- match_avinue_array 1 x 1000 objects, 16032 bytes
---- action_name_list_array 1 x 1000 objects, 16032 bytes
---- match_avinue_array 1 x 1000 objects, 16032 bytes
---- adjective 142 objects, 15904 bytes
---- md_doc_state 3 objects, 15720 bytes
---- booking_list 410 objects, 13120 bytes
@ -125,22 +125,22 @@ Total memory consumption was 144279K = 141 MB
---- heading_tree 33 objects, 10296 bytes
---- stopwatch_timer 127 objects, 10160 bytes
---- understanding_item_array 4 x 100 = 400 objects, 9728 bytes
---- inbuild_work 150 objects, 9600 bytes
---- inbuild_copy 65 objects, 9360 bytes
---- inbuild_work 142 objects, 9088 bytes
---- equation_node 68 objects, 7616 bytes
---- shared_variable_array 1 x 100 objects, 7232 bytes
---- determiner 22 objects, 7216 bytes
---- hierarchy_attachment_point 80 objects, 7040 bytes
---- inbuild_edition 97 objects, 6984 bytes
---- verb 109 objects, 6976 bytes
---- text_literal_holder 172 objects, 6880 bytes
---- text_literal_holder 173 objects, 6920 bytes
---- semver_range 60 objects, 6240 bytes
---- inform_extension 32 objects, 6144 bytes
---- section_md 63 objects, 6048 bytes
---- compatibility_specification 111 objects, 5328 bytes
---- build_script 164 objects, 5248 bytes
---- inbuild_licence 65 objects, 5200 bytes
---- activity 35 objects, 5040 bytes
---- semver_range 48 objects, 4992 bytes
---- value_property_data 88 objects, 4928 bytes
---- explicit_action_array 1 x 100 objects, 4832 bytes
---- parsing_pp_data 97 objects, 4656 bytes
@ -154,19 +154,19 @@ Total memory consumption was 144279K = 141 MB
---- submodule_request 86 objects, 3440 bytes
---- parsed_use_option_setting 47 objects, 3384 bytes
---- JSON_type 46 objects, 3312 bytes
---- arithmetic_schema_array 1 x 50 objects, 3232 bytes
---- kind_constructor_comparison_schema_array 1 x 100 objects, 3232 bytes
---- arithmetic_schema_array 1 x 50 objects, 3232 bytes
---- target_vm 21 objects, 3024 bytes
---- JSON_single_requirement 63 objects, 3024 bytes
---- local_parking_lot 64 objects, 2560 bytes
---- part_of_inference_data 79 objects, 2528 bytes
---- parentage_inference_data 79 objects, 2528 bytes
---- kind_constructor_instance_rule_array 1 x 100 objects, 2432 bytes
---- part_of_inference_data 79 objects, 2528 bytes
---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes
---- kind_constructor_instance_rule_array 1 x 100 objects, 2432 bytes
---- equation_symbol 30 objects, 2400 bytes
---- scene 1 object, 2352 bytes
---- inbuild_requirement 51 objects, 2040 bytes
---- build_step 28 objects, 2016 bytes
---- inbuild_requirement 43 objects, 1720 bytes
---- compiler_feature 30 objects, 1680 bytes
---- pronoun_usage 42 objects, 1680 bytes
---- table_column 16 objects, 1664 bytes
@ -191,68 +191,68 @@ Total memory consumption was 144279K = 141 MB
---- named_rulebook_outcome 15 objects, 960 bytes
---- pipeline_stage 20 objects, 960 bytes
---- control_structure_phrase 12 objects, 864 bytes
---- cached_understanding 21 objects, 840 bytes
---- kit_configuration 21 objects, 840 bytes
---- cached_understanding 21 objects, 840 bytes
---- phrase_option_array 1 x 100 objects, 824 bytes
---- copy_error 7 objects, 784 bytes
---- inform_kit 7 objects, 784 bytes
---- copy_error 7 objects, 784 bytes
---- internal_test 15 objects, 720 bytes
---- relation_guard 5 objects, 640 bytes
---- implication 13 objects, 624 bytes
---- chapter_md 7 objects, 616 bytes
---- code_generation 1 object, 592 bytes
---- index_lemma 4 objects, 576 bytes
---- module 7 objects, 560 bytes
---- inter_warehouse_room 10 objects, 560 bytes
---- generated_segment 14 objects, 560 bytes
---- inter_annotation_form 14 objects, 560 bytes
---- generated_segment 14 objects, 560 bytes
---- inter_warehouse_room 10 objects, 560 bytes
---- module 7 objects, 560 bytes
---- rulebook_outcome 17 objects, 544 bytes
---- markdown_variation 3 objects, 528 bytes
---- small_word_set 11 objects, 528 bytes
---- IFM_example 4 objects, 512 bytes
---- equation 4 objects, 480 bytes
---- indexing_category 6 objects, 480 bytes
---- equation 4 objects, 480 bytes
---- inbuild_genre 8 objects, 448 bytes
---- bp_family 14 objects, 448 bytes
---- inference_family 11 objects, 440 bytes
---- source_file 5 objects, 440 bytes
---- article_usage 8 objects, 384 bytes
---- door_dir_notice 5 objects, 320 bytes
---- grammatical_category 8 objects, 320 bytes
---- module_request 8 objects, 320 bytes
---- pronoun 8 objects, 320 bytes
---- tree_inventory 1 object, 320 bytes
---- cached_kind_declaration 8 objects, 320 bytes
---- pronoun 8 objects, 320 bytes
---- module_request 8 objects, 320 bytes
---- door_dir_notice 5 objects, 320 bytes
---- grammatical_category 8 objects, 320 bytes
---- inter_pipeline 1 object, 312 bytes
---- up_family 9 objects, 288 bytes
---- contents_entry 7 objects, 280 bytes
---- door_to_notice 5 objects, 280 bytes
---- explicit_bp_data 5 objects, 280 bytes
---- door_to_notice 5 objects, 280 bytes
---- contents_entry 7 objects, 280 bytes
---- compilation_unit 5 objects, 280 bytes
---- kit_dependency 5 objects, 240 bytes
---- verb_usage_tier 5 objects, 240 bytes
---- inform_project 1 object, 232 bytes
---- local_block_value 4 objects, 224 bytes
---- adjective_meaning_family 7 objects, 224 bytes
---- local_block_value 4 objects, 224 bytes
---- cd_volume 3 objects, 216 bytes
---- test_scenario 1 object, 216 bytes
---- release_instructions 1 object, 208 bytes
---- attachment_instruction 5 objects, 200 bytes
---- code_generator 5 objects, 200 bytes
---- build_skill 5 objects, 200 bytes
---- plural_dictionary_entry 4 objects, 192 bytes
---- element_activation 6 objects, 192 bytes
---- code_generator 5 objects, 200 bytes
---- attachment_instruction 5 objects, 200 bytes
---- index_reference 4 objects, 192 bytes
---- element_activation 6 objects, 192 bytes
---- plural_dictionary_entry 4 objects, 192 bytes
---- inbuild_nest 4 objects, 160 bytes
---- inference_subject_family 5 objects, 160 bytes
---- imperative_defn_family 4 objects, 160 bytes
---- inter_architecture 4 objects, 160 bytes
---- inference_subject_family 5 objects, 160 bytes
---- cd_pageset 3 objects, 144 bytes
---- inbuild_nest 3 objects, 120 bytes
---- inform_language 1 object, 104 bytes
---- md_links_dictionary 3 objects, 96 bytes
---- article 2 objects, 80 bytes
---- compile_task_data 1 object, 80 bytes
---- group_together_function 2 objects, 80 bytes
---- compile_task_data 1 object, 80 bytes
---- article 2 objects, 80 bytes
---- build_methodology 1 object, 56 bytes
---- inter_warehouse 1 object, 56 bytes
---- figures_data 1 object, 56 bytes
@ -265,11 +265,11 @@ Total memory consumption was 144279K = 141 MB
---- kind_template_definition 1 object, 40 bytes
---- i6_memory_setting 1 object, 32 bytes
100.0% was used for memory not allocated for objects:
99.9% was used for memory not allocated for objects:
63.1% text stream storage 93323620 bytes in 545783 claims
4.0% dictionary storage 5929920 bytes in 7844 claims
---- sorting 6424 bytes in 1489 claims
63.2% text stream storage 93515392 bytes in 546355 claims
4.0% dictionary storage 5932480 bytes in 7849 claims
---- sorting 6648 bytes in 1601 claims
4.8% source text 7200000 bytes in 3 claims
7.3% source text details 10800000 bytes in 2 claims
0.1% documentation fragments 262144 bytes in 1 claim
@ -282,8 +282,8 @@ Total memory consumption was 144279K = 141 MB
1.2% instance-of-kind counting 1790244 bytes in 1 claim
---- compilation workspace for objects 22216 bytes in 25 claims
---- lists for type-checking invocations 16000 bytes in 1 claim
---- code generation workspace for objects 3552 bytes in 19 claims
---- code generation workspace for objects 3560 bytes in 19 claims
0.1% emitter array storage 290944 bytes in 2081 claims
-139.-2% was overhead - -205675816 bytes = -200855K = -196 MB
-139.-3% was overhead - -206184448 bytes = -201352K = -196 MB

View file

@ -5,10 +5,9 @@ ROOT_NT
BEGINHERE_NT'version 2 of basic inform by graham nelson' {unit: 0}
...
INCLUSION_NT'include english language by graham nelson'
HEADING_NT'version 2 of english language by graham nelson begins here' {heading 0} {under: H0'version 2 of english language by graham nelson begins here'} {includes: English Language by Graham Nelson v2 } {unit: 1}
BEGINHERE_NT'version 2 of english language by graham nelson' {unit: 1}
HEADING_NT'version 10.2.0 of english language by graham nelson begins h' {heading 0} {under: H0'version 10.2.0 of english language by graham nelson begins here'} {includes: English Language v10.2.0 } {unit: 1}
BEGINHERE_NT'version 10.2.0 of english language by graham nelson' {unit: 1}
...
INCLUSION_NT'include english language by graham nelson'
INCLUSION_NT'include standard rules by graham nelson'
HEADING_NT'version 7 of the standard rules by graham nelson begins here' {heading 0} {under: H0'version 7 of the standard rules by graham nelson begins here'} {includes: Standard Rules by Graham Nelson v7 } {unit: 2}
BEGINHERE_NT'version 7 of the standard rules by graham nelson' {unit: 2}

View file

@ -1,6 +1,6 @@
100.0% in inform7 run
67.4% in compilation to Inter
45.6% in //Sequence::undertake_queued_tasks//
67.0% in compilation to Inter
45.3% in //Sequence::undertake_queued_tasks//
4.8% in //MajorNodes::pre_pass//
3.3% in //MajorNodes::pass_1//
1.8% in //ImperativeDefinitions::assess_all//
@ -15,7 +15,7 @@
0.3% in //World::stage_V//
5.3% not specifically accounted for
26.9% in running Inter pipeline
8.9% in step 14/15: generate inform6 -> auto.inf
8.6% in step 14/15: generate inform6 -> auto.inf
7.1% in step 5/15: load-binary-kits
5.6% in step 6/15: make-synoptic-module
1.8% in step 9/15: make-identifiers-unique
@ -23,6 +23,6 @@
0.3% in step 4/15: compile-splats
0.3% in step 7/15: shorten-wiring
0.3% in step 8/15: detect-indirect-calls
1.9% not specifically accounted for
2.2% not specifically accounted for
5.2% in supervisor
0.4% not specifically accounted for
0.8% not specifically accounted for

View file

@ -0,0 +1,3 @@
`English Language` is an extension built in to Inform which provides definitions
needed for adaptive text written in English, and also support for the standard
English version of the internal Preform grammar used inside the compiler.

View file

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

View file

@ -1,4 +1,4 @@
Version 2 of English Language by Graham Nelson begins here.
Version 10.2.0 of English Language by Graham Nelson begins here.
"To make English the language of play."
@ -520,3 +520,4 @@ To say Possessive:
say "[The item][apostrophe]s".
English Language ends here.

View file

@ -0,0 +1,20 @@
{
"is": {
"type": "extension",
"title": "English Language",
"author": "Graham Nelson",
"version": "10.2.0"
},
"needs": [ {
"need": {
"type": "kit",
"title": "EnglishLanguageKit"
}
} ],
"rights": {
"licence": "Artistic-2.0",
"rights-owner": "Graham Nelson",
"date": 2024,
"rights-history": "This extension is basic to Inform and requires no acknowledgement."
}
}

View file

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

View file

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

View file

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

View file

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

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "DialogueKit",
"version": "10.2.0-beta+6V51"
"version": "10.2.0-beta+6X63"
},
"activates": [ "dialogue" ],
"kit-details": {

View file

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

View file

@ -2,7 +2,6 @@
status "inform7/Internal/HTML/CblorbModel.html" "/Users/gnelson/Natural Inform/intest/Workspace/T0/Example.inform/Build/StatusCblorb.html"
! Identification
project folder "/Users/gnelson/Natural Inform/intest/Workspace/T0/Example.inform"

View file

@ -2,7 +2,6 @@
status "inform7/Internal/HTML/CblorbModel.html" "/Users/gnelson/Natural Inform/intest/Workspace/T0/Example.inform/Build/StatusCblorb.html"
! Identification
project folder "/Users/gnelson/Natural Inform/intest/Workspace/T0/Example.inform"

View file

@ -2,7 +2,6 @@
status "inform7/Internal/HTML/CblorbModel.html" "/Users/gnelson/Natural Inform/intest/Workspace/T0/Example.inform/Build/StatusCblorb.html"
! Identification
project folder "/Users/gnelson/Natural Inform/intest/Workspace/T0/Example.inform"

View file

@ -2,7 +2,6 @@
status "inform7/Internal/HTML/CblorbModel.html" "/Users/gnelson/Natural Inform/intest/Workspace/T0/Example.inform/Build/StatusCblorb.html"
! Identification
project folder "/Users/gnelson/Natural Inform/intest/Workspace/T0/Example.inform"

View file

@ -2,7 +2,6 @@
status "inform7/Internal/HTML/CblorbModel.html" "/Users/gnelson/Natural Inform/intest/Workspace/T0/Example.inform/Build/StatusCblorb.html"
! Identification
project folder "/Users/gnelson/Natural Inform/intest/Workspace/T0/Example.inform"
@ -36,12 +35,9 @@ auxiliary "inform7/Internal/Miscellany/IntroductionToIF.pdf" "Introduction to IF
auxiliary "inform7/Internal/Miscellany/Postcard.pdf" "IF Postcard" "--"
placeholder [OTHERCREDITS] = "The postcard was written by Andrew Plotkin and designed by Lea Albaugh."
! Website instructions
! Interpreter instructions
placeholder [ENCODEDSTORYFILE] = "story.gblorb.js"
template path "/Users/gnelson/Natural Inform/intest/Workspace/T0/Example.materials/Templates"
template path "/Users/gnelson/Natural Inform/intest/Workspace/T0/Example.materials/Templates"
template path "inform7/Tests/Templates"
template path "inform7/Internal/Templates"
placeholder [INTERPRETERSCRIPTS] = " "
interpreter "Quixe" "g"
@ -49,10 +45,6 @@ base64 "/Users/gnelson/Natural Inform/intest/Workspace/T0/Example.materials/Rele
! Website instructions
template path "/Users/gnelson/Natural Inform/intest/Workspace/T0/Example.materials/Templates"
template path "/Users/gnelson/Natural Inform/intest/Workspace/T0/Example.materials/Templates"
template path "inform7/Tests/Templates"
template path "inform7/Internal/Templates"
css
website "Standard"
status instruction ||&nbsp;<a href="source:story.ni#line3"><img border=0 src=inform:/doc_images/Reveal.png></a>||

View file

@ -2,7 +2,6 @@
status "inform7/Internal/HTML/CblorbModel.html" "/Users/gnelson/Natural Inform/intest/Workspace/T0/Example.inform/Build/StatusCblorb.html"
! Identification
project folder "/Users/gnelson/Natural Inform/intest/Workspace/T0/Example.inform"

View file

@ -2,7 +2,6 @@
status "inform7/Internal/HTML/CblorbModel.html" "/Users/gnelson/Natural Inform/intest/Workspace/T0/Example.inform/Build/StatusCblorb.html"
! Identification
project folder "/Users/gnelson/Natural Inform/intest/Workspace/T0/Example.inform"

View file

@ -251,11 +251,21 @@ void LicenceDeclaration::check_licences(void) {
int LicenceDeclaration::anything_to_declare(void) {
inform_project *proj = Task::project();
inbuild_licence *L = proj->as_copy->licence;
if ((L->read_from_JSON) || (L->discussed_in_source)) return TRUE;
if (LicenceDeclaration::to_be_declared(L)) return TRUE;
inform_extension *E;
LOOP_OVER_LINKED_LIST(E, inform_extension, proj->extensions_included) {
L = E->as_copy->licence;
if ((L->read_from_JSON) || (L->discussed_in_source)) return TRUE;
if (LicenceDeclaration::to_be_declared(L)) return TRUE;
}
return FALSE;
}
int LicenceDeclaration::to_be_declared(inbuild_licence *L) {
if ((L->read_from_JSON) || (L->discussed_in_source)) {
if (Str::eq(L->rights_history,
I"This extension is basic to Inform and requires no acknowledgement."))
return FALSE;
return TRUE;
}
return FALSE;
}

View file

@ -71,12 +71,13 @@ the Blorb-file's filename won't be too long for the file system.
WRITE("\n! Other material to release\n\n");
@<Give instructions about source text, solution and library card@>;
@<Give instructions about auxiliary files@>;
int templates_declared = FALSE;
if (rel->release_interpreter) @<Give instructions to release with an interpreter for Web play@>;
if (rel->release_website) @<Give instructions to construct a website around the release@>;
@<Give hints to Inblorb for its HTML status page@>;
@<Tell Inblorb where to write its report to@> =
WRITE("status \"%f\" \"%f\"\n\n",
WRITE("status \"%f\" \"%f\"\n",
InstalledFiles::filename(CBLORB_REPORT_MODEL_IRES),
Task::cblorb_report_file());
@ -208,7 +209,7 @@ own credits.
file online.
@<Give instructions to release with an interpreter for Web play@> =
WRITE("\n! Website instructions\n\n");
WRITE("\n! Interpreter instructions\n\n");
WRITE("placeholder [ENCODEDSTORYFILE] = \"");
STREAM_COPY(OUT, TEMP);
WRITE(".js\"\n");
@ -260,19 +261,41 @@ a project, then the |Templates| directory in the materials for extensions
included by the project, and then the external area, and finally the internal.
@<Tell Inblorb where to find the website templates@> =
inbuild_nest *N;
linked_list *L = Projects::nest_list(Task::project());
LOOP_OVER_LINKED_LIST(N, inbuild_nest, L) {
WRITE("template path \"%p\"\n", TemplateManager::path_within_nest(N));
if (Nests::get_tag(N) == MATERIALS_NEST_TAG) {
inform_extension *E;
LOOP_OVER_LINKED_LIST(E, inform_extension, Task::project()->extensions_included) {
pathname *P = Extensions::materials_path(E);
if (P) {
WRITE("template path \"%p\"\n", TemplateManager::path_within_nest(Nests::new(P)));
if (templates_declared == FALSE) {
inbuild_nest *N;
linked_list *L = Projects::nest_list(Task::project());
linked_list *declared = NEW_LINKED_LIST(text_stream);
LOOP_OVER_LINKED_LIST(N, inbuild_nest, L) {
inbuild_nest *M = N;
@<Declare one template path@>;
if (Nests::get_tag(N) == MATERIALS_NEST_TAG) {
inform_extension *E;
LOOP_OVER_LINKED_LIST(E, inform_extension, Task::project()->extensions_included) {
pathname *P = Extensions::materials_path(E);
if (P) {
M = Nests::new(P);
@<Declare one template path@>;
}
}
}
}
templates_declared = TRUE;
}
@<Declare one template path@> =
pathname *TP = TemplateManager::path_within_nest(M);
if (Directories::exists(TP)) {
text_stream *declaration = Str::new();
WRITE_TO(declaration, "template path \"%p\"\n", TP);
int already = FALSE;
text_stream *done;
LOOP_OVER_LINKED_LIST(done, text_stream, declared)
if (Str::eq(done, declaration))
already = TRUE;
if (already == FALSE) {
WRITE("%S", declaration);
ADD_TO_LINKED_LIST(declaration, text_stream, declared);
}
}
@ Inblorb reports its progress, or lack of it, with an HTML page, just as we do.

View file

@ -42,5 +42,5 @@ Internal/Inter/Architecture32Kit/*.interb
Internal/Inter/BasicInformKit/*.interb
Internal/Inter/CommandParserKit/*.interb
Internal/Inter/DialogueKit/*.interb
Internal/Inter/EnglishLanguageKit/*.interb
Internal/Extensions/Graham Nelson/English*/Materials/Inter/EnglishLanguageKit/*.interb
Internal/Inter/WorldModelKit/*.interb

View file

@ -10,6 +10,8 @@ this plan out.
@e PROBLEMS_CLSW
@e KIT_VERSIONS_CLSW
@e SYNC_KIT_VERSIONS_CLSW
@e EXTENSION_VERSIONS_CLSW
@e SYNC_EXTENSION_VERSIONS_CLSW
=
pathname *path_to_inpolicy = NULL; /* where we are installed */
@ -29,6 +31,10 @@ int main(int argc, char **argv) {
U"show version numbers of the built-in kits");
CommandLine::declare_switch(SYNC_KIT_VERSIONS_CLSW, U"sync-kit-versions", 1,
U"fix version numbers of the built-in kits to match core inform7 version");
CommandLine::declare_switch(EXTENSION_VERSIONS_CLSW, U"extension-versions", 1,
U"show version numbers of the built-in extensions");
CommandLine::declare_switch(SYNC_EXTENSION_VERSIONS_CLSW, U"sync-extension-versions", 1,
U"fix version numbers of the built-in extensions to match core inform7 version");
CommandLine::declare_boolean_switch(SILENCE_CLSW, U"silence", 1,
U"print nothing unless there's something wrong", FALSE);
@ -66,6 +72,8 @@ void Main::respond(int id, int val, text_stream *arg, void *state) {
case PROBLEMS_CLSW: RUNTEST(Coverage::check); break;
case KIT_VERSIONS_CLSW: KitVersioning::show_versions(); break;
case SYNC_KIT_VERSIONS_CLSW: KitVersioning::sync_versions(); break;
case EXTENSION_VERSIONS_CLSW: ExtensionVersioning::show_versions(); break;
case SYNC_EXTENSION_VERSIONS_CLSW: ExtensionVersioning::sync_versions(); break;
case SILENCE_CLSW: silence_mode = val; break;
case VERBOSE_CLSW: verbose_mode = val; break;
}

View file

@ -0,0 +1,202 @@
[ExtensionVersioning::] Extension Versioning.
To ensure that the built-in extensions share version numbers with the core compiler.
@ This implements |-extension-versions|:
=
void ExtensionVersioning::show_versions(void) {
semantic_version_number core_V = ExtensionVersioning::simplified_core_version();
PRINT("Simplified core version is %v\n", &core_V);
ExtensionVersioning::iterate(VersionNumbers::null());
}
@ And |-sync-extension-versions|:
=
void ExtensionVersioning::sync_versions(void) {
semantic_version_number core_V = ExtensionVersioning::simplified_core_version();
PRINT("Simplified core version is %v\n", &core_V);
ExtensionVersioning::iterate(core_V);
}
semantic_version_number ExtensionVersioning::simplified_core_version(void) {
web_md *inform7_web =
WebMetadata::get_without_modules(Pathnames::from_text(I"inform7"), NULL);
semantic_version_number V = inform7_web->version_number;
V.prerelease_segments = NULL;
V.build_metadata = NULL;
return V;
}
@ Both use the following to work through the built-in kits:
=
void ExtensionVersioning::iterate(semantic_version_number set_to) {
pathname *P = Pathnames::from_text(I"inform7/Internal/Extensions/Graham Nelson");
linked_list *L = Directories::listing(P);
text_stream *entry;
LOOP_OVER_LINKED_LIST(entry, text_stream, L) {
if (Platform::is_folder_separator(Str::get_last_char(entry))) {
Str::delete_last_character(entry);
pathname *X = Pathnames::down(P, entry);
match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, entry, U"(%c+)-v(%d%c*).i7xd")) {
text_stream *raw_name = mr.exp[0];
semantic_version_number claimed = VersionNumbers::from_text(mr.exp[1]);
ExtensionVersioning::show_version(X, raw_name, claimed, set_to);
}
Regexp::dispose_of(&mr);
}
}
}
void ExtensionVersioning::show_version(pathname *P, text_stream *name,
semantic_version_number claimed, semantic_version_number set_to) {
semantic_version_number V = ExtensionVersioning::read_version(P, name, claimed, set_to);
PRINT("Extension %S has version %v\n", name, &V);
}
@ The actual work, then, is done by this function, which returns the version
number of the kit stored at the path |kit|; if |set_to| is other than null,
the kit's version is changed to |set_to|, and this value returned. In both
cases, the kit's JSON metadata file is read in; in the second case, it is
then written back out, modified to include the new version number. (Note
that no file write occurs unless an actual change is needed: if |set_to|
is the same as the version it already has, there's no need to rewrite.)
=
semantic_version_number ExtensionVersioning::read_version(pathname *X, text_stream *name,
semantic_version_number claimed, semantic_version_number set_to) {
filename *F = Filenames::in(X, I"extension_metadata.json");
TEMPORARY_TEXT(contents)
TextFiles::read(F, FALSE, "unable to read file of JSON metadata", TRUE,
&ExtensionVersioning::read_metadata_file_helper, NULL, contents);
text_file_position tfp = TextFiles::at(F, 1);
JSON_value *value = JSON::decode(contents, &tfp);
if ((value) && (value->JSON_type == ERROR_JSONTYPE)) {
Errors::at_position("Syntax error in metadata file for extension", F, 1);
return VersionNumbers::null();
}
DISCARD_TEXT(contents)
JSON_value *is = JSON::look_up_object(value, I"is");
if (is == NULL) {
Errors::at_position("Semantic error in metadata file for extension", F, 1);
return VersionNumbers::null();
}
JSON_value *version = JSON::look_up_object(is, I"version");
semantic_version_number V = VersionNumbers::null();
if (version) {
V = VersionNumbers::from_text(version->if_string);
if (VersionNumbers::is_null(V)) {
Errors::at_position("Malformed version number in metadata file for extension", F, 1);
return VersionNumbers::null();
}
}
if (VersionNumbers::is_null(set_to) == FALSE) {
@<If necessary impose the new version in metadata file@>;
@<If necessary impose the new version in directory name@>;
@<If necessary impose the new version in extension header@>;
}
return V;
}
@ The following test used to be just |VersionNumbers::ne(set_to, V)|, but this,
because it properly followed the semver standard, regarded them as equal if they
differed only in the build code -- so |10.1.0-beta+6V20| would not be updated to
|10.1.0-beta+6V44|, for example. We now force a sync if there is any textual
difference at all.
@<If necessary impose the new version in metadata file@> =
TEMPORARY_TEXT(a)
TEMPORARY_TEXT(b)
WRITE_TO(a, "%v", &set_to);
WRITE_TO(b, "%v", &V);
if (Str::ne(a, b))
@<Change the version to set_to@>;
DISCARD_TEXT(a)
DISCARD_TEXT(b)
@ We change the JSON object for the kit's metadata (at object.is.version), and
then encode the object out as a new version of the file:
@<Change the version to set_to@> =
if (version == NULL) {
version = JSON::new_string(I"");
JSON::add_to_object(is, I"version", version);
}
PRINT("Rewriting %f to impose version number %v (was %v)\n", F, &set_to, &V);
Str::clear(version->if_string);
WRITE_TO(version->if_string, "%v", &set_to);
text_stream JSON_struct; text_stream *OUT = &JSON_struct;
if (STREAM_OPEN_TO_FILE(OUT, F, UTF8_ENC) == FALSE)
Errors::fatal_with_file("unable to open metadata file for output: %f", F);
JSON::encode(OUT, value);
STREAM_CLOSE(OUT);
V = set_to;
@
@<If necessary impose the new version in directory name@> =
TEMPORARY_TEXT(correct_name)
TEMPORARY_TEXT(flattened)
WRITE_TO(flattened, "%v", &set_to);
LOOP_THROUGH_TEXT(pos, flattened)
if (Str::get(pos) == '.')
Str::put(pos, '_');
WRITE_TO(correct_name, "%S-v%S.i7xd", name, flattened);
DISCARD_TEXT(flattened)
if (Str::ne(Pathnames::directory_name(X), correct_name)) {
pathname *XC = Pathnames::down(Pathnames::up(X), correct_name);
Pathnames::move_directory(X, XC);
X = XC;
PRINT("Renaming directory to %p\n", X);
}
DISCARD_TEXT(correct_name)
@
@<If necessary impose the new version in extension header@> =
TEMPORARY_TEXT(leaf)
WRITE_TO(leaf, "%S.i7x", name);
filename *F = Filenames::in(Pathnames::down(X, I"Source"), leaf);
DISCARD_TEXT(leaf)
TEMPORARY_TEXT(source)
TextFiles::read(F, FALSE, "unable to read file of extension source", TRUE,
&ExtensionVersioning::read_metadata_file_helper, NULL, source);
match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, source, U"(Version )(%d%C*?)( of %c*)")) {
semantic_version_number sourced = VersionNumbers::from_text(mr.exp[1]);
TEMPORARY_TEXT(a)
TEMPORARY_TEXT(b)
WRITE_TO(a, "%v", &set_to);
WRITE_TO(b, "%v", &sourced);
if (Str::ne(a, b))
@<Change the version in the extension to set_to@>;
DISCARD_TEXT(a)
DISCARD_TEXT(b)
}
Regexp::dispose_of(&mr);
DISCARD_TEXT(source)
@<Change the version in the extension to set_to@> =
PRINT("Rewriting opening line of %f\n", F);
text_stream S_struct; text_stream *OUT = &S_struct;
if (STREAM_OPEN_TO_FILE(OUT, F, UTF8_ENC) == FALSE)
Errors::fatal_with_file("unable to open extension source for output: %f", F);
WRITE("%S%v", mr.exp[0], &set_to);
int pos = Str::len(mr.exp[0]) + Str::len(mr.exp[1]);
for (int i=pos; i<Str::len(source); i++)
PUT(Str::get_at(source, i));
STREAM_CLOSE(OUT);
@
=
void ExtensionVersioning::read_metadata_file_helper(text_stream *text, text_file_position *tfp,
void *v_state) {
text_stream *contents = (text_stream *) v_state;
WRITE_TO(contents, "%S\n", text);
}

View file

@ -28,16 +28,39 @@ void KitVersioning::sync_versions(void) {
=
void KitVersioning::iterate(semantic_version_number set_to) {
KitVersioning::show_version(I"WorldModelKit", set_to);
KitVersioning::show_version(I"EnglishLanguageKit", set_to);
KitVersioning::show_version(I"CommandParserKit", set_to);
KitVersioning::show_version(I"BasicInformKit", set_to);
KitVersioning::show_version(I"Architecture16Kit", set_to);
KitVersioning::show_version(I"Architecture32Kit", set_to);
pathname *P = Pathnames::from_text(I"inform7/Internal/Inter");
KitVersioning::show_version(P, I"WorldModelKit", set_to);
KitVersioning::show_version(P, I"CommandParserKit", set_to);
KitVersioning::show_version(P, I"BasicInformKit", set_to);
KitVersioning::show_version(P, I"DialogueKit", set_to);
KitVersioning::show_version(P, I"Architecture16Kit", set_to);
KitVersioning::show_version(P, I"Architecture32Kit", set_to);
pathname *X = Pathnames::from_text(I"inform7/Internal/Extensions/Graham Nelson");
KitVersioning::iterate_through(X, set_to);
}
void KitVersioning::show_version(text_stream *name, semantic_version_number set_to) {
pathname *P = Pathnames::from_text(I"inform7/Internal/Inter");
void KitVersioning::iterate_through(pathname *P, semantic_version_number set_to) {
linked_list *L = Directories::listing(P);
text_stream *entry;
LOOP_OVER_LINKED_LIST(entry, text_stream, L) {
if (Platform::is_folder_separator(Str::get_last_char(entry))) {
Str::delete_last_character(entry);
pathname *X = Pathnames::down(P, entry);
X = Pathnames::down(X, I"Materials");
X = Pathnames::down(X, I"Inter");
linked_list *L2 = Directories::listing(X);
text_stream *kit;
LOOP_OVER_LINKED_LIST(kit, text_stream, L2) {
if (Platform::is_folder_separator(Str::get_last_char(kit))) {
Str::delete_last_character(kit);
KitVersioning::show_version(X, kit, set_to);
}
}
}
}
}
void KitVersioning::show_version(pathname *P, text_stream *name, semantic_version_number set_to) {
P = Pathnames::down(P, name);
semantic_version_number V = KitVersioning::read_version(P, set_to);
PRINT("Kit %S has version %v\n", name, &V);

View file

@ -19,3 +19,4 @@ Chapter 1: Setting Up
Chapter 2: Policies
Problem Coverage
Kit Versioning
Extension Versioning

View file

@ -2,16 +2,18 @@ A lint-like tool to check up on various policies used in Inform source code.
usage: inpolicy [options]
-check-problems check problem test case coverage
-kit-versions show version numbers of the built-in kits
-silence print nothing unless there's something wrong (default is -no-silence)
-sync-kit-versions fix version numbers of the built-in kits to match core inform7 version
-verbose explain what inpolicy is doing (default is -no-verbose)
-check-problems check problem test case coverage
-extension-versions show version numbers of the built-in extensions
-kit-versions show version numbers of the built-in kits
-silence print nothing unless there's something wrong (default is -no-silence)
-sync-extension-versions fix version numbers of the built-in extensions to match core inform7 version
-sync-kit-versions fix version numbers of the built-in kits to match core inform7 version
-verbose explain what inpolicy is doing (default is -no-verbose)
-at X specify that this tool is installed at X
-crash intentionally crash on internal errors, for backtracing (default is -no-crash)
-fixtime pretend the time is 11 a.m. on 28 March 2016 for testing (default is -no-fixtime)
-help print this help information
-locale X set locales as 'L=E', L being shell or console, E platform, utf-8 or iso-latin1
-log X write the debugging log to include diagnostics on X
-version print out version number
-at X specify that this tool is installed at X
-crash intentionally crash on internal errors, for backtracing (default is -no-crash)
-fixtime pretend the time is 11 a.m. on 28 March 2016 for testing (default is -no-fixtime)
-help print this help information
-locale X set locales as 'L=E', L being shell or console, E platform, utf-8 or iso-latin1
-log X write the debugging log to include diagnostics on X
-version print out version number

View file

@ -152,7 +152,7 @@ INFORM6WEB = inform6
{component type: web symbol: ARCHITECTURE32KIT webname: Architecture32Kit path: inform7/Internal/Inter/Architecture32Kit set: kits}
{component type: web symbol: WORLDMODELKIT webname: WorldModelKit path: inform7/Internal/Inter/WorldModelKit set: kits}
{component type: web symbol: COMMANDPARSERKIT webname: CommandParserKit path: inform7/Internal/Inter/CommandParserKit set: kits}
{component type: web symbol: ENGLISHLANGUAGEKIT webname: EnglishLanguageKit path: inform7/Internal/Inter/EnglishLanguageKit set: kits}
{component type: web symbol: ENGLISHLANGUAGEKIT webname: EnglishLanguageKit path: inform7/Internal/Extensions/Graham Nelson/English Language-v10_2_0.i7xd/Materials/Inter/EnglishLanguageKit set: kits}
{component type: web symbol: DIALOGUEKIT webname: DialogueKit path: inform7/Internal/Inter/DialogueKit set: kits}
{component type: web symbol: STANDARDRULES webname: standard_rules path: inform7/extensions/standard_rules set: extensions}
@ -371,6 +371,7 @@ check:
commit:
$(INWEBX) -advance-build-file build.txt
$(INPOLICYX) -sync-kit-versions
$(INPOLICYX) -sync-extension-versions
{update-readme}
git commit -a
@ -677,8 +678,6 @@ forcetransferpreform:
# -----------------------------------------------------------------------------
# Copying the indexing structure and localisation files into the app
{set name: LOCALISEDINDEXES value: English}
.PHONY: transferindext
transferindext: forcetransferindext
@ -687,10 +686,8 @@ forcetransferindext:
mkdir -p "$(INTERNAL)/Miscellany"
cp -f "$(INFORM7WEB)/Internal/Miscellany/Standard.indext" "$(INTERNAL)/Miscellany/Standard.indext"
cp -f "$(INFORM7WEB)/Internal/Miscellany/Basic.indext" "$(INTERNAL)/Miscellany/Basic.indext"
{repeat with: LANGUAGE in: {LOCALISEDINDEXES}}
mkdir -p "$(INTERNAL)/Languages/{LANGUAGE}"
cp -f "$(INFORM7WEB)/Internal/Languages/{LANGUAGE}/Index.txt" "$(INTERNAL)/Languages/{LANGUAGE}/Index.txt"
{end-repeat}
mkdir -p "$(INTERNAL)/Languages/English"
cp -f "$(INFORM7WEB)/Internal/Languages/English/Index.txt" "$(INTERNAL)/Languages/English/Index.txt"
# -----------------------------------------------------------------------------
# Copying kits (and Inter pipelines) into the app

View file

@ -146,18 +146,10 @@ The following webs are the source for the two most important extensions shipped
{set name: PATH value: inform7/Internal/Extensions/{AUTHOR}/{TITLE}.i7x}
* [{TITLE} by {AUTHOR}](inform7/extensions/{WEB}) - __v{bibliographic datum: Version Number of: {PATH}}__ - [{WEBICON}&nbsp;Web]({GITHUBPAGESLINK}/{WEB}/index.html)
{end-define}
{define: extension author: AUTHOR title: TITLE}
{set name: PATH value: inform7/Internal/Extensions/{AUTHOR}/{TITLE}.i7x}
* [{TITLE} by {AUTHOR}](<{PATH}>) - __v{bibliographic datum: Version Number of: {PATH}}__
{end-define}
{extension-web web: basic_inform author: Graham Nelson title: Basic Inform}
{extension-web web: standard_rules author: Graham Nelson title: Standard Rules}
Other extensions shipped with Inform are not presented as webs, but as single files:
{extension author: Graham Nelson title: English Language}
### Website templates and interpreters shipped with Inform
These are templates used by Inform to release story files within a website:

View file

@ -1,5 +1,5 @@
Size of lexicon: 3223 excerpt meanings
Stored among 860 words out of total vocabulary of 10707
Stored among 860 words out of total vocabulary of 10708
724 words have a start list: longest belongs to report (with 296 meanings)
21 words have an end list: longest belongs to digits (with 7 meanings)
29 words have a middle list: longest belongs to matches (with 6 meanings)