1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-07 17:44:22 +03:00

Merge branch 'master' into origsource

This commit is contained in:
Andrew Plotkin 2023-05-25 11:06:06 -04:00
commit be564fa747
24 changed files with 623 additions and 123 deletions

View file

@ -1,6 +1,6 @@
# Inform 7 # Inform 7
[Version](notes/versioning.md): 10.2.0-beta+6W49 'Krypton' (16 May 2023) [Version](notes/versioning.md): 10.2.0-beta+6W51 'Krypton' (24 May 2023)
## About Inform ## About Inform

View file

@ -1,3 +1,3 @@
Prerelease: beta Prerelease: beta
Build Date: 16 May 2023 Build Date: 24 May 2023
Build Number: 6W49 Build Number: 6W51

View file

@ -118,6 +118,13 @@ group.
<span class="plain-syntax"> </span><span class="string-syntax">"which I don't recognise (which is not fine). Specifically, %2."</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><span class="string-syntax">"which I don't recognise (which is not fine). Specifically, %2."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span> <span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span> <span class="plain-syntax"> </span><span class="reserved-syntax">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">PROJECT_MALFORMED_CE:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_stream</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">details</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">Untestable</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="string-syntax">"This project seems to be malformed. Specifically, %1."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="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">METADATA_MALFORMED_CE:</span> <span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">METADATA_MALFORMED_CE:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">found_by</span><span class="plain-syntax">) {</span> <span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">found_by</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-sq.html#SP1" class="function-link"><span class="function-syntax">Problems::quote_work</span></a><span class="plain-syntax">(1, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">found_by</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">work</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><a href="2-sq.html#SP1" class="function-link"><span class="function-syntax">Problems::quote_work</span></a><span class="plain-syntax">(1, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">found_by</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">work</span><span class="plain-syntax">);</span>

View file

@ -70,6 +70,7 @@ function togglePopup(material_id) {
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">inbuild_task</span><span class="plain-syntax"> = </span><span class="constant-syntax">INSPECT_TTASK</span><span class="plain-syntax">;</span> <span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">inbuild_task</span><span class="plain-syntax"> = </span><span class="constant-syntax">INSPECT_TTASK</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">path_to_tools</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span> <span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">path_to_tools</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">dry_run_mode</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">build_trace_mode</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">confirmed</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span> <span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">dry_run_mode</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">build_trace_mode</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">confirmed</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">contents_of_used</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">recursive</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">destination_nest</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span> <span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">destination_nest</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">selected_registry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span> <span class="reserved-syntax">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">selected_registry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">filter_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span> <span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">filter_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
@ -395,8 +396,21 @@ the order in which filenames are read from a directory listing.
<span class="plain-syntax">}</span> <span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Main::add_file_or_path_as_target</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Main::add_file_or_path_as_target</span></span>:<br/><a href="1-mn.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arg</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">throwing_error</span><span class="plain-syntax">) {</span> <span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Main::add_file_or_path_as_target</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Main::add_file_or_path_as_target</span></span>:<br/><a href="1-mn.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arg</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">throwing_error</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">is_folder</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/1-wp.html#SP4" 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">arg</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><a href="1-mn.html#SP2_8" class="function-link"><span class="function-syntax">Main::file_or_path_to_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">, </span><span class="identifier-syntax">throwing_error</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><a href="1-mn.html#SP2_8" class="function-link"><span class="function-syntax">Main::file_or_path_to_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">, </span><span class="identifier-syntax">throwing_error</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax">) </span><a href="1-mn.html#SP2_7" class="function-link"><span class="function-syntax">Main::add_target</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="1-mn.html#SP2_7" class="function-link"><span class="function-syntax">Main::add_target</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">recursive</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">is_folder</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">arg</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="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">FILENAME</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">FILENAME</span><span class="plain-syntax">, </span><span class="string-syntax">"%p%c%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="constant-syntax">FOLDER_SEPARATOR</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-mn.html#SP2_8" class="function-link"><span class="function-syntax">Main::add_file_or_path_as_target</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FILENAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">throwing_error</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">FILENAME</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span> <span class="plain-syntax">}</span>
</pre> </pre>
<p class="commentary firstcommentary"><a id="SP2_9" class="paragraph-anchor"></a><b>&#167;2.9. Command line. </b>Note the call below to <span class="extract"><span class="extract-syntax">Supervisor::declare_options</span></span>, which adds a whole lot of <p class="commentary firstcommentary"><a id="SP2_9" class="paragraph-anchor"></a><b>&#167;2.9. Command line. </b>Note the call below to <span class="extract"><span class="extract-syntax">Supervisor::declare_options</span></span>, which adds a whole lot of
@ -420,6 +434,7 @@ other options to the selection defined here.
<span class="definition-keyword">enum</span> <span class="constant-syntax">BUILD_TRACE_CLSW</span> <span class="definition-keyword">enum</span> <span class="constant-syntax">BUILD_TRACE_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">TOOLS_CLSW</span> <span class="definition-keyword">enum</span> <span class="constant-syntax">TOOLS_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">CONTENTS_OF_CLSW</span> <span class="definition-keyword">enum</span> <span class="constant-syntax">CONTENTS_OF_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">RECURSIVE_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">MATCHING_CLSW</span> <span class="definition-keyword">enum</span> <span class="constant-syntax">MATCHING_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">COPY_TO_CLSW</span> <span class="definition-keyword">enum</span> <span class="constant-syntax">COPY_TO_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">SYNC_TO_CLSW</span> <span class="definition-keyword">enum</span> <span class="constant-syntax">SYNC_TO_CLSW</span>
@ -483,6 +498,8 @@ other options to the selection defined here.
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"apply to all works in nest(s) matching requirement X"</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"apply to all works in nest(s) matching requirement X"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP5" class="function-link"><span class="function-syntax">CommandLine::declare_switch</span></a><span class="plain-syntax">(</span><span class="constant-syntax">CONTENTS_OF_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"contents-of"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span> <span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP5" class="function-link"><span class="function-syntax">CommandLine::declare_switch</span></a><span class="plain-syntax">(</span><span class="constant-syntax">CONTENTS_OF_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"contents-of"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"apply to all targets in the directory X"</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"apply to all targets in the directory X"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP6" class="function-link"><span class="function-syntax">CommandLine::declare_boolean_switch</span></a><span class="plain-syntax">(</span><span class="constant-syntax">RECURSIVE_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"recursive"</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">L</span><span class="string-syntax">"run -contents-of recursively to look through subdirectories too"</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-cla.html#SP5" class="function-link"><span class="function-syntax">CommandLine::declare_switch</span></a><span class="plain-syntax">(</span><span class="constant-syntax">VERIFY_REGISTRY_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"verify-registry"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span> <span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP5" class="function-link"><span class="function-syntax">CommandLine::declare_switch</span></a><span class="plain-syntax">(</span><span class="constant-syntax">VERIFY_REGISTRY_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"verify-registry"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"verify roster.json metadata of registry in the directory X"</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"verify roster.json metadata of registry in the directory X"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP5" class="function-link"><span class="function-syntax">CommandLine::declare_switch</span></a><span class="plain-syntax">(</span><span class="constant-syntax">BUILD_REGISTRY_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"build-registry"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span> <span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP5" class="function-link"><span class="function-syntax">CommandLine::declare_switch</span></a><span class="plain-syntax">(</span><span class="constant-syntax">BUILD_REGISTRY_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"build-registry"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
@ -529,8 +546,11 @@ other options to the selection defined here.
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">BUILD_MISSING_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">inbuild_task</span><span class="plain-syntax"> = </span><span class="constant-syntax">BUILD_MISSING_TTASK</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">BUILD_MISSING_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">inbuild_task</span><span class="plain-syntax"> = </span><span class="constant-syntax">BUILD_MISSING_TTASK</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">TOOLS_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">path_to_tools</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">arg</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span> <span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TOOLS_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">path_to_tools</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">arg</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MATCHING_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">filter_text</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/4-sm.html#SP3" class="function-link"><span class="function-syntax">Str::duplicate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span> <span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MATCHING_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">filter_text</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/4-sm.html#SP3" class="function-link"><span class="function-syntax">Str::duplicate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONTENTS_OF_CLSW:</span> <span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONTENTS_OF_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">contents_of_used</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="1-mn.html#SP2_8" class="function-link"><span class="function-syntax">Main::add_directory_contents_targets</span></a><span class="plain-syntax">(</span><a href="../../../inweb/foundation-module/3-pth.html#SP5" class="function-link"><span class="function-syntax">Pathnames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">)); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span> <span class="plain-syntax"> </span><a href="1-mn.html#SP2_8" class="function-link"><span class="function-syntax">Main::add_directory_contents_targets</span></a><span class="plain-syntax">(</span><a href="../../../inweb/foundation-module/3-pth.html#SP5" class="function-link"><span class="function-syntax">Pathnames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">)); </span><span class="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">RECURSIVE_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">recursive</span><span class="plain-syntax"> = </span><span class="identifier-syntax">val</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">contents_of_used</span><span class="plain-syntax">) </span><a href="../../../inweb/foundation-module/3-em.html#SP2" class="function-link"><span class="function-syntax">Errors::fatal</span></a><span class="plain-syntax">(</span><span class="string-syntax">"-recursive must be used before -contents-of"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">DRY_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">dry_run_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">DRY_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">dry_run_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">BUILD_TRACE_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">build_trace_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">BUILD_TRACE_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">build_trace_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">COPY_TO_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">inbuild_task</span><span class="plain-syntax"> = </span><span class="constant-syntax">COPY_TO_TTASK</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">COPY_TO_CLSW:</span><span class="plain-syntax"> </span><span class="identifier-syntax">inbuild_task</span><span class="plain-syntax"> = </span><span class="constant-syntax">COPY_TO_TTASK</span><span class="plain-syntax">;</span>

View file

@ -81,6 +81,7 @@ and those not documented in this manual are covered in that one.
<span class="plain-syntax">-preprocess-html X construct HTML page based on X</span> <span class="plain-syntax">-preprocess-html X construct HTML page based on X</span>
<span class="plain-syntax">-preprocess-html-to X set destination for -preprocess-html to be X</span> <span class="plain-syntax">-preprocess-html-to X set destination for -preprocess-html to be X</span>
<span class="plain-syntax">-rebuild completely rebuild target(s)</span> <span class="plain-syntax">-rebuild completely rebuild target(s)</span>
<span class="plain-syntax">-recursive run -contents-of recursively to look through subdirectories too (default is -no-recursive)</span>
<span class="plain-syntax">-no-repair don't quietly fix missing or incorrect extension metadata (default is -repair)</span> <span class="plain-syntax">-no-repair don't quietly fix missing or incorrect extension metadata (default is -repair)</span>
<span class="plain-syntax">-results X write HTML report file to X (for use within Inform GUI apps)</span> <span class="plain-syntax">-results X write HTML report file to X (for use within Inform GUI apps)</span>
<span class="plain-syntax">-sync-to X forcibly copy target(s) to nest X, even if prior version already there</span> <span class="plain-syntax">-sync-to X forcibly copy target(s) to nest X, even if prior version already there</span>

View file

@ -70,38 +70,34 @@ which take more than 1/1000th of the total running time.
<pre class="undisplayed-code all-displayed-code code-font"> <pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">100.0% in inform7 run</span> <span class="plain-syntax">100.0% in inform7 run</span>
<span class="plain-syntax"> 70.3% in compilation to Inter</span> <span class="plain-syntax"> 66.5% in compilation to Inter</span>
<span class="plain-syntax"> 49.8% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a> <span class="plain-syntax"> 44.8% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 5.0% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pre_pass</a> <span class="plain-syntax"> 4.6% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pre_pass</a>
<span class="plain-syntax"> 3.3% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_1</a> <span class="plain-syntax"> 3.5% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_1</a>
<span class="plain-syntax"> 1.8% in </span><a href="../assertions-module/5-id.html#SP4" class="internal">ImperativeDefinitions::assess_all</a> <span class="plain-syntax"> 1.7% in </span><a href="../assertions-module/5-id.html#SP4" class="internal">ImperativeDefinitions::assess_all</a>
<span class="plain-syntax"> 1.4% in </span><a href="../runtime-module/5-kc.html#SP10" class="internal">RTKindConstructors::compile</a> <span class="plain-syntax"> 1.7% in </span><a href="../runtime-module/5-kc.html#SP10" class="internal">RTKindConstructors::compile</a>
<span class="plain-syntax"> 1.4% in </span><a href="../runtime-module/6-pi.html#SP1" class="internal">RTPhrasebook::compile_entries</a> <span class="plain-syntax"> 1.4% in </span><a href="../runtime-module/6-pi.html#SP1" class="internal">RTPhrasebook::compile_entries</a>
<span class="plain-syntax"> 1.1% in </span><a href="../core-module/1-htc.html#SP12" class="internal">Sequence::lint_inter</a> <span class="plain-syntax"> 1.0% in </span><a href="../core-module/1-htc.html#SP12" class="internal">Sequence::lint_inter</a>
<span class="plain-syntax"> 0.5% in </span><a href="../assertions-module/5-id.html#SP5" class="internal">ImperativeDefinitions::compile_first_block</a> <span class="plain-syntax"> 0.7% in </span><a href="../assertions-module/5-id.html#SP5" class="internal">ImperativeDefinitions::compile_first_block</a>
<span class="plain-syntax"> 0.5% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_2</a> <span class="plain-syntax"> 0.7% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 0.5% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a> <span class="plain-syntax"> 0.7% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 0.5% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a> <span class="plain-syntax"> 0.7% in </span><a href="../knowledge-module/5-tmw.html#SP5" class="internal">World::stage_V</a>
<span class="plain-syntax"> 0.5% in </span><a href="../knowledge-module/5-tmw.html#SP5" class="internal">World::stage_V</a> <span class="plain-syntax"> 0.3% in </span><a href="../runtime-module/3-cm.html#SP1" class="internal">CompletionModule::compile</a>
<span class="plain-syntax"> 0.1% in </span><a href="../runtime-module/3-cm.html#SP1" class="internal">CompletionModule::compile</a> <span class="plain-syntax"> 0.3% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_2</a>
<span class="plain-syntax"> 0.1% in </span><a href="../knowledge-module/4-is.html#SP27" class="internal">InferenceSubjects::emit_all</a> <span class="plain-syntax"> 3.9% not specifically accounted for</span>
<span class="plain-syntax"> 0.1% in </span><a href="../runtime-module/5-kc.html#SP10_7" class="internal">RTKindConstructors::compile_permissions</a> <span class="plain-syntax"> 29.5% in running Inter pipeline</span>
<span class="plain-syntax"> 0.1% in </span><a href="../core-module/1-wtc.html#SP9" class="internal">Task::make_built_in_kind_constructors</a> <span class="plain-syntax"> 9.6% in step 5/15: load-binary-kits</span>
<span class="plain-syntax"> 0.1% in </span><a href="../knowledge-module/5-tmw.html#SP3" class="internal">World::stages_II_and_III</a> <span class="plain-syntax"> 8.5% in step 14/15: generate inform6 -&gt; auto.inf</span>
<span class="plain-syntax"> 2.6% not specifically accounted for</span> <span class="plain-syntax"> 5.6% in step 6/15: make-synoptic-module</span>
<span class="plain-syntax"> 26.2% in running Inter pipeline</span> <span class="plain-syntax"> 2.1% in step 9/15: make-identifiers-unique</span>
<span class="plain-syntax"> 9.8% in step 14/15: generate inform6 -&gt; auto.inf</span> <span class="plain-syntax"> 0.3% in step 11/15: eliminate-redundant-labels</span>
<span class="plain-syntax"> 6.2% in step 5/15: load-binary-kits</span>
<span class="plain-syntax"> 5.3% in step 6/15: make-synoptic-module</span>
<span class="plain-syntax"> 1.6% in step 9/15: make-identifiers-unique</span>
<span class="plain-syntax"> 0.5% in step 4/15: compile-splats</span>
<span class="plain-syntax"> 0.3% in step 12/15: eliminate-redundant-operations</span> <span class="plain-syntax"> 0.3% in step 12/15: eliminate-redundant-operations</span>
<span class="plain-syntax"> 0.3% in step 4/15: compile-splats</span>
<span class="plain-syntax"> 0.3% in step 7/15: shorten-wiring</span> <span class="plain-syntax"> 0.3% in step 7/15: shorten-wiring</span>
<span class="plain-syntax"> 0.3% in step 8/15: detect-indirect-calls</span> <span class="plain-syntax"> 0.3% in step 8/15: detect-indirect-calls</span>
<span class="plain-syntax"> 0.1% in step 11/15: eliminate-redundant-labels</span> <span class="plain-syntax"> 1.8% not specifically accounted for</span>
<span class="plain-syntax"> 1.2% not specifically accounted for</span> <span class="plain-syntax"> 3.2% in supervisor</span>
<span class="plain-syntax"> 2.9% in supervisor</span> <span class="plain-syntax"> 0.8% not specifically accounted for</span>
<span class="plain-syntax"> 0.4% not specifically accounted for</span>
</pre> </pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. Memory consumption. </b>The following gives some idea of which classes of object have the most <p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. Memory consumption. </b>The following gives some idea of which classes of object have the most
instances, and also of how Inform's memory tends to be used in practice. instances, and also of how Inform's memory tends to be used in practice.
@ -110,19 +106,19 @@ represent less than 1/1000th of the total.
</p> </p>
<pre class="undisplayed-code all-displayed-code code-font"> <pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">Total memory consumption was 123156K = 120 MB</span> <span class="plain-syntax">Total memory consumption was 123162K = 120 MB</span>
<span class="plain-syntax"> ---- was used for 2063828 objects, in 367775 frames in 0 x 800K = 0K = 0 MB:</span> <span class="plain-syntax"> ---- was used for 2063850 objects, in 367797 frames in 0 x 800K = 0K = 0 MB:</span>
<span class="plain-syntax"> 33.1% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes</span> <span class="plain-syntax"> 33.1% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes</span>
<span class="plain-syntax"> 20.9% text_stream_array 4684 x 100 = 468400 objects, 26380288 bytes</span> <span class="plain-syntax"> 20.9% text_stream_array 4684 x 100 = 468400 objects, 26380288 bytes</span>
<span class="plain-syntax"> 19.7% linked_list 44520 objects, 24931200 bytes</span> <span class="plain-syntax"> 19.7% linked_list 44526 objects, 24934560 bytes</span>
<span class="plain-syntax"> 11.2% inter_symbol_array 133 x 1024 = 136192 objects, 14168224 bytes</span> <span class="plain-syntax"> 11.2% inter_symbol_array 133 x 1024 = 136192 objects, 14168224 bytes</span>
<span class="plain-syntax"> 10.7% inter_error_stash_array 103 x 1024 = 105472 objects, 13503712 bytes</span> <span class="plain-syntax"> 10.7% inter_error_stash_array 103 x 1024 = 105472 objects, 13503712 bytes</span>
<span class="plain-syntax"> 8.2% parse_node 130369 objects, 10429520 bytes</span> <span class="plain-syntax"> 8.2% parse_node 130369 objects, 10429520 bytes</span>
<span class="plain-syntax"> 6.0% verb_conjugation 164 objects, 7610912 bytes</span> <span class="plain-syntax"> 6.0% verb_conjugation 164 objects, 7610912 bytes</span>
<span class="plain-syntax"> 4.4% parse_node_annotation_array 348 x 500 = 174000 objects, 5579136 bytes</span> <span class="plain-syntax"> 4.4% parse_node_annotation_array 348 x 500 = 174000 objects, 5579136 bytes</span>
<span class="plain-syntax"> 2.8% scan_directory 866 objects, 3574848 bytes</span> <span class="plain-syntax"> 2.8% scan_directory 872 objects, 3599616 bytes</span>
<span class="plain-syntax"> 2.6% pcalc_prop_array 25 x 1000 = 25000 objects, 3400800 bytes</span> <span class="plain-syntax"> 2.6% pcalc_prop_array 25 x 1000 = 25000 objects, 3400800 bytes</span>
<span class="plain-syntax"> 2.5% inter_name_array 67 x 1000 = 67000 objects, 3218144 bytes</span> <span class="plain-syntax"> 2.5% inter_name_array 67 x 1000 = 67000 objects, 3218144 bytes</span>
<span class="plain-syntax"> 2.1% kind_array 67 x 1000 = 67000 objects, 2682144 bytes</span> <span class="plain-syntax"> 2.1% kind_array 67 x 1000 = 67000 objects, 2682144 bytes</span>
@ -140,8 +136,8 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> 0.7% inter_schema_node 8965 objects, 1004080 bytes</span> <span class="plain-syntax"> 0.7% inter_schema_node 8965 objects, 1004080 bytes</span>
<span class="plain-syntax"> 0.7% adjective_meaning 202 objects, 1000304 bytes</span> <span class="plain-syntax"> 0.7% adjective_meaning 202 objects, 1000304 bytes</span>
<span class="plain-syntax"> 0.7% excerpt_meaning 3119 objects, 973128 bytes</span> <span class="plain-syntax"> 0.7% excerpt_meaning 3119 objects, 973128 bytes</span>
<span class="plain-syntax"> 0.7% production 3968 objects, 920576 bytes</span> <span class="plain-syntax"> 0.7% production 3969 objects, 920808 bytes</span>
<span class="plain-syntax"> 0.7% ptoken 8627 objects, 897208 bytes</span> <span class="plain-syntax"> 0.7% ptoken 8632 objects, 897728 bytes</span>
<span class="plain-syntax"> 0.6% grammatical_usage 3637 objects, 872880 bytes</span> <span class="plain-syntax"> 0.6% grammatical_usage 3637 objects, 872880 bytes</span>
<span class="plain-syntax"> 0.6% individual_form 2567 objects, 862512 bytes</span> <span class="plain-syntax"> 0.6% individual_form 2567 objects, 862512 bytes</span>
<span class="plain-syntax"> 0.5% unary_predicate_array 16 x 1000 = 16000 objects, 640512 bytes</span> <span class="plain-syntax"> 0.5% unary_predicate_array 16 x 1000 = 16000 objects, 640512 bytes</span>
@ -206,14 +202,14 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- parse_node_tree 33 objects, 28776 bytes</span> <span class="plain-syntax"> ---- parse_node_tree 33 objects, 28776 bytes</span>
<span class="plain-syntax"> ---- action_pattern_array 7 x 100 = 700 objects, 28224 bytes</span> <span class="plain-syntax"> ---- action_pattern_array 7 x 100 = 700 objects, 28224 bytes</span>
<span class="plain-syntax"> ---- shared_variable_set_array 6 x 100 = 600 objects, 24192 bytes</span> <span class="plain-syntax"> ---- shared_variable_set_array 6 x 100 = 600 objects, 24192 bytes</span>
<span class="plain-syntax"> ---- filename 591 objects, 23640 bytes</span> <span class="plain-syntax"> ---- filename 590 objects, 23600 bytes</span>
<span class="plain-syntax"> ---- property 146 objects, 22192 bytes</span> <span class="plain-syntax"> ---- property 146 objects, 22192 bytes</span>
<span class="plain-syntax"> ---- backdrops_data 672 objects, 21504 bytes</span> <span class="plain-syntax"> ---- backdrops_data 672 objects, 21504 bytes</span>
<span class="plain-syntax"> ---- inter_node_list 646 objects, 20672 bytes</span> <span class="plain-syntax"> ---- inter_node_list 646 objects, 20672 bytes</span>
<span class="plain-syntax"> ---- nonlocal_variable 94 objects, 20304 bytes</span> <span class="plain-syntax"> ---- nonlocal_variable 94 objects, 20304 bytes</span>
<span class="plain-syntax"> ---- pipeline_step 15 objects, 20280 bytes</span> <span class="plain-syntax"> ---- pipeline_step 15 objects, 20280 bytes</span>
<span class="plain-syntax"> ---- action_name 90 objects, 20160 bytes</span> <span class="plain-syntax"> ---- action_name 90 objects, 20160 bytes</span>
<span class="plain-syntax"> ---- pathname 487 objects, 19480 bytes</span> <span class="plain-syntax"> ---- pathname 492 objects, 19680 bytes</span>
<span class="plain-syntax"> ---- timed_rules_rfd_data 401 objects, 19248 bytes</span> <span class="plain-syntax"> ---- timed_rules_rfd_data 401 objects, 19248 bytes</span>
<span class="plain-syntax"> ---- method 390 objects, 18720 bytes</span> <span class="plain-syntax"> ---- method 390 objects, 18720 bytes</span>
<span class="plain-syntax"> ---- pcalc_prop_deferral 86 objects, 17888 bytes</span> <span class="plain-syntax"> ---- pcalc_prop_deferral 86 objects, 17888 bytes</span>
@ -363,16 +359,16 @@ represent less than 1/1000th of the total.
<span class="plain-syntax">100.0% was used for memory not allocated for objects:</span> <span class="plain-syntax">100.0% was used for memory not allocated for objects:</span>
<span class="plain-syntax"> 57.5% text stream storage 72566448 bytes in 487987 claims</span> <span class="plain-syntax"> 57.5% text stream storage 72572792 bytes in 488027 claims</span>
<span class="plain-syntax"> 4.2% dictionary storage 5319680 bytes in 7630 claims</span> <span class="plain-syntax"> 4.2% dictionary storage 5319680 bytes in 7630 claims</span>
<span class="plain-syntax"> ---- sorting 2720 bytes in 387 claims</span> <span class="plain-syntax"> ---- sorting 2752 bytes in 394 claims</span>
<span class="plain-syntax"> 5.7% source text 7200000 bytes in 3 claims</span> <span class="plain-syntax"> 5.7% source text 7200000 bytes in 3 claims</span>
<span class="plain-syntax"> 8.5% source text details 10800000 bytes in 2 claims</span> <span class="plain-syntax"> 8.5% source text details 10800000 bytes in 2 claims</span>
<span class="plain-syntax"> 0.2% documentation fragments 262144 bytes in 1 claim</span> <span class="plain-syntax"> 0.2% documentation fragments 262144 bytes in 1 claim</span>
<span class="plain-syntax"> ---- linguistic stock array 81920 bytes in 2 claims</span> <span class="plain-syntax"> ---- linguistic stock array 81920 bytes in 2 claims</span>
<span class="plain-syntax"> ---- small word set array 105600 bytes in 22 claims</span> <span class="plain-syntax"> ---- small word set array 105600 bytes in 22 claims</span>
<span class="plain-syntax"> 3.6% inter symbols storage 4558480 bytes in 27989 claims</span> <span class="plain-syntax"> 3.6% inter symbols storage 4558480 bytes in 27989 claims</span>
<span class="plain-syntax"> 13.3% inter bytecode storage 16773540 bytes in 14 claims</span> <span class="plain-syntax"> 13.2% inter bytecode storage 16773540 bytes in 14 claims</span>
<span class="plain-syntax"> 4.9% inter links storage 6222976 bytes in 11 claims</span> <span class="plain-syntax"> 4.9% inter links storage 6222976 bytes in 11 claims</span>
<span class="plain-syntax"> 0.1% inter tree location list storage 191232 bytes in 32 claims</span> <span class="plain-syntax"> 0.1% inter tree location list storage 191232 bytes in 32 claims</span>
<span class="plain-syntax"> 1.3% instance-of-kind counting 1705636 bytes in 1 claim</span> <span class="plain-syntax"> 1.3% instance-of-kind counting 1705636 bytes in 1 claim</span>
@ -381,7 +377,7 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- code generation workspace for objects 3480 bytes in 19 claims</span> <span class="plain-syntax"> ---- code generation workspace for objects 3480 bytes in 19 claims</span>
<span class="plain-syntax"> 0.2% emitter array storage 280544 bytes in 2001 claims</span> <span class="plain-syntax"> 0.2% emitter array storage 280544 bytes in 2001 claims</span>
<span class="plain-syntax">-150.0% was overhead - -189255168 bytes = -184819K = -180 MB</span> <span class="plain-syntax">-150.0% was overhead - -189284208 bytes = -184847K = -180 MB</span>
</pre> </pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Preform grammar. </b>The full annotated description of the Preform grammar (see <a href="../words-module/4-ap.html" class="internal">About Preform (in words)</a>), <p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Preform grammar. </b>The full annotated description of the Preform grammar (see <a href="../words-module/4-ap.html" class="internal">About Preform (in words)</a>),
with optimisation details and hit/miss statistics added, is also long: it's with optimisation details and hit/miss statistics added, is also long: it's
@ -424,7 +420,7 @@ sample, showing the nonterminal used to parse literals in Inform 7 source text:
<a href="preform-diagnostics.txt" download> <a href="preform-diagnostics.txt" download>
<button class="download-button"> <button class="download-button">
<img src="../docs-assets/download.png" alt="download icon" height=16 width=16> <img src="../docs-assets/download.png" alt="download icon" height=16 width=16>
Download <b>preform-diagnostics.txt</b> (Preform diagnostics file, 400.4kB) Download <b>preform-diagnostics.txt</b> (Preform diagnostics file, 400.5kB)
</button> </button>
</a> </a>
</p> </p>

View file

@ -6199,7 +6199,9 @@
<defined-by-sentence-subject> nti 24 constraint (none) extremes [1, infinity) <defined-by-sentence-subject> nti 24 constraint (none) extremes [1, infinity)
English: English:
kind/kinds of <s-type-expression> <article> kind/kinds of {<s-type-expression>}
constraint DS = {24} extremes [4, infinity)
kind/kinds of {<s-type-expression>}
constraint DS = {24} extremes [3, infinity) constraint DS = {24} extremes [3, infinity)
<s-type-expression> <s-type-expression>
constraint (none) extremes [1, infinity) constraint (none) extremes [1, infinity)

View file

@ -79,6 +79,7 @@ fields are blank.
<span class="definition-keyword">enum</span> <span class="constant-syntax">EXT_TITLE_TOO_LONG_CE</span> <span class="definition-keyword">enum</span> <span class="constant-syntax">EXT_TITLE_TOO_LONG_CE</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">EXT_AUTHOR_TOO_LONG_CE</span> <span class="definition-keyword">enum</span> <span class="constant-syntax">EXT_AUTHOR_TOO_LONG_CE</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">EXT_RANEOUS_CE</span> <span class="definition-keyword">enum</span> <span class="constant-syntax">EXT_RANEOUS_CE</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">PROJECT_MALFORMED_CE</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">LANGUAGE_UNAVAILABLE_CE</span> <span class="definition-keyword">enum</span> <span class="constant-syntax">LANGUAGE_UNAVAILABLE_CE</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">LANGUAGE_DEFICIENT_CE</span> <span class="definition-keyword">enum</span> <span class="constant-syntax">LANGUAGE_DEFICIENT_CE</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">LEXER_CE</span><span class="plain-syntax"> </span><span class="comment-syntax"> an error generated by the </span><span class="extract"><span class="extract-syntax">words</span></span><span class="comment-syntax"> module</span> <span class="definition-keyword">enum</span> <span class="constant-syntax">LEXER_CE</span><span class="plain-syntax"> </span><span class="comment-syntax"> an error generated by the </span><span class="extract"><span class="extract-syntax">words</span></span><span class="comment-syntax"> module</span>
@ -126,7 +127,7 @@ fields are blank.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">CE</span><span class="plain-syntax">;</span> <span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">CE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span> <span class="plain-syntax">}</span>
<span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="function-syntax">CopyErrors::new_T</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">CopyErrors::new_T</span></span>:<br/>JSON Metadata - <a href="2-jm.html#SP1_1">&#167;1.1</a>, <a href="2-jm.html#SP1_2">&#167;1.2</a>, <a href="2-jm.html#SP1_3_1">&#167;1.3.1</a>, <a href="2-jm.html#SP1_3_2">&#167;1.3.2</a>, <a href="2-jm.html#SP1_3_3">&#167;1.3.3</a>, <a href="2-jm.html#SP1_3_4">&#167;1.3.4</a>, <a href="2-jm.html#SP1_3_5">&#167;1.3.5</a>, <a href="2-jm.html#SP1_4">&#167;1.4</a>, <a href="2-jm.html#SP1_5">&#167;1.5</a>, <a href="2-jm.html#SP1_6">&#167;1.6</a><br/>Extension Bundle Manager - <a href="4-ebm.html#SP3">&#167;3</a>, <a href="4-ebm.html#SP5">&#167;5</a>, <a href="4-ebm.html#SP5_1">&#167;5.1</a>, <a href="4-ebm.html#SP5_1_1">&#167;5.1.1</a>, <a href="4-ebm.html#SP5_1_2">&#167;5.1.2</a>, <a href="4-ebm.html#SP5_1_3">&#167;5.1.3</a><br/>Extension Services - <a href="5-es.html#SP2_2">&#167;2.2</a>, <a href="5-es.html#SP2_2_1">&#167;2.2.1</a>, <a href="5-es.html#SP2_2_1_3">&#167;2.2.1.3</a>, <a href="5-es.html#SP2_2_1_3_2">&#167;2.2.1.3.2</a>, <a href="5-es.html#SP2_3">&#167;2.3</a>, <a href="5-es.html#SP2_4">&#167;2.4</a>, <a href="5-es.html#SP2_4_3">&#167;2.4.3</a>, <a href="5-es.html#SP2_4_3_1_1">&#167;2.4.3.1.1</a>, <a href="5-es.html#SP2_4_3_2_1">&#167;2.4.3.2.1</a>, <a href="5-es.html#SP2_5">&#167;2.5</a>, <a href="5-es.html#SP2_6_3">&#167;2.6.3</a>, <a href="5-es.html#SP8">&#167;8</a>, <a href="5-es.html#SP11_1">&#167;11.1</a><br/>Kit Services - <a href="5-ks.html#SP5_3">&#167;5.3</a>, <a href="5-ks.html#SP5_3_1">&#167;5.3.1</a>, <a href="5-ks.html#SP5_3_1_1">&#167;5.3.1.1</a>, <a href="5-ks.html#SP5_3_2">&#167;5.3.2</a>, <a href="5-ks.html#SP12">&#167;12</a><br/>Language Services - <a href="5-ls.html#SP2">&#167;2</a><br/>Project Services - <a href="5-ps2.html#SP2_3">&#167;2.3</a>, <a href="5-ps2.html#SP17">&#167;17</a>, <a href="5-ps2.html#SP22_1">&#167;22.1</a>, <a href="5-ps2.html#SP22_5">&#167;22.5</a>, <a href="5-ps2.html#SP24">&#167;24</a>, <a href="5-ps2.html#SP35">&#167;35</a>, <a href="5-ps2.html#SP36">&#167;36</a><br/>Headings - <a href="6-hdn.html#SP22_2">&#167;22.2</a><br/>Inclusions - <a href="6-inc.html#SP2_2">&#167;2.2</a>, <a href="6-inc.html#SP2_2_1">&#167;2.2.1</a>, <a href="6-inc.html#SP6_1_1">&#167;6.1.1</a>, <a href="6-inc.html#SP6_1_2">&#167;6.1.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cat</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">subcat</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">NB</span><span class="plain-syntax">) {</span> <span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="function-syntax">CopyErrors::new_T</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">CopyErrors::new_T</span></span>:<br/>JSON Metadata - <a href="2-jm.html#SP1_1">&#167;1.1</a>, <a href="2-jm.html#SP1_2">&#167;1.2</a>, <a href="2-jm.html#SP1_3_1">&#167;1.3.1</a>, <a href="2-jm.html#SP1_3_2">&#167;1.3.2</a>, <a href="2-jm.html#SP1_3_3">&#167;1.3.3</a>, <a href="2-jm.html#SP1_3_4">&#167;1.3.4</a>, <a href="2-jm.html#SP1_3_5">&#167;1.3.5</a>, <a href="2-jm.html#SP1_4">&#167;1.4</a>, <a href="2-jm.html#SP1_5">&#167;1.5</a>, <a href="2-jm.html#SP1_6">&#167;1.6</a><br/>Extension Bundle Manager - <a href="4-ebm.html#SP3">&#167;3</a>, <a href="4-ebm.html#SP5">&#167;5</a>, <a href="4-ebm.html#SP5_1">&#167;5.1</a>, <a href="4-ebm.html#SP5_1_1">&#167;5.1.1</a>, <a href="4-ebm.html#SP5_1_2">&#167;5.1.2</a>, <a href="4-ebm.html#SP5_1_3">&#167;5.1.3</a><br/>Project Bundle Manager - <a href="4-pbm.html#SP3_1">&#167;3.1</a>, <a href="4-pbm.html#SP3_1_1">&#167;3.1.1</a>, <a href="4-pbm.html#SP3_1_2">&#167;3.1.2</a>, <a href="4-pbm.html#SP3_1_3">&#167;3.1.3</a>, <a href="4-pbm.html#SP3_1_3_1">&#167;3.1.3.1</a><br/>Extension Services - <a href="5-es.html#SP2_2">&#167;2.2</a>, <a href="5-es.html#SP2_2_1">&#167;2.2.1</a>, <a href="5-es.html#SP2_2_1_1">&#167;2.2.1.1</a>, <a href="5-es.html#SP2_2_1_3">&#167;2.2.1.3</a>, <a href="5-es.html#SP2_2_1_3_2">&#167;2.2.1.3.2</a>, <a href="5-es.html#SP2_3">&#167;2.3</a>, <a href="5-es.html#SP2_4">&#167;2.4</a>, <a href="5-es.html#SP2_4_3">&#167;2.4.3</a>, <a href="5-es.html#SP2_4_3_1_1">&#167;2.4.3.1.1</a>, <a href="5-es.html#SP2_4_3_2_1">&#167;2.4.3.2.1</a>, <a href="5-es.html#SP2_5">&#167;2.5</a>, <a href="5-es.html#SP2_6_3">&#167;2.6.3</a>, <a href="5-es.html#SP8">&#167;8</a>, <a href="5-es.html#SP11_1">&#167;11.1</a><br/>Kit Services - <a href="5-ks.html#SP5_3">&#167;5.3</a>, <a href="5-ks.html#SP5_3_1">&#167;5.3.1</a>, <a href="5-ks.html#SP5_3_1_1">&#167;5.3.1.1</a>, <a href="5-ks.html#SP5_3_2">&#167;5.3.2</a>, <a href="5-ks.html#SP12">&#167;12</a><br/>Language Services - <a href="5-ls.html#SP2">&#167;2</a><br/>Project Services - <a href="5-ps2.html#SP2_3">&#167;2.3</a>, <a href="5-ps2.html#SP17">&#167;17</a>, <a href="5-ps2.html#SP22_1">&#167;22.1</a>, <a href="5-ps2.html#SP22_5">&#167;22.5</a>, <a href="5-ps2.html#SP24">&#167;24</a>, <a href="5-ps2.html#SP35">&#167;35</a>, <a href="5-ps2.html#SP36">&#167;36</a><br/>Headings - <a href="6-hdn.html#SP22_2">&#167;22.2</a><br/>Inclusions - <a href="6-inc.html#SP2_2">&#167;2.2</a>, <a href="6-inc.html#SP2_2_1">&#167;2.2.1</a>, <a href="6-inc.html#SP6_1_1">&#167;6.1.1</a>, <a href="6-inc.html#SP6_1_2">&#167;6.1.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cat</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">subcat</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">NB</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax"> = </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cat</span><span class="plain-syntax">, </span><span class="identifier-syntax">subcat</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax"> = </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cat</span><span class="plain-syntax">, </span><span class="identifier-syntax">subcat</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">details</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">NB</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">details</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">NB</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">CE</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">CE</span><span class="plain-syntax">;</span>
@ -199,6 +200,7 @@ output.
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">EXT_BAD_DIRNAME_CE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"extension directory name wrong: %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">details</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span> <span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">EXT_BAD_DIRNAME_CE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"extension directory name wrong: %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">details</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">EXT_BAD_FILENAME_CE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"extension filename wrong: %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">details</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span> <span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">EXT_BAD_FILENAME_CE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"extension filename wrong: %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">details</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">EXT_RANEOUS_CE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"extraneous content: %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">details</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span> <span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">EXT_RANEOUS_CE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"extraneous content: %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">details</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PROJECT_MALFORMED_CE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"project malformed: %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">details</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">METADATA_MALFORMED_CE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S has incorrect metadata: %S"</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">METADATA_MALFORMED_CE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S has incorrect metadata: %S"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">details</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span> <span class="plain-syntax"> </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">genre_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">details</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">EXT_TITLE_TOO_LONG_CE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"title too long: %d characters (max is %d)"</span><span class="plain-syntax">,</span> <span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">EXT_TITLE_TOO_LONG_CE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"title too long: %d characters (max is %d)"</span><span class="plain-syntax">,</span>

View file

@ -147,7 +147,7 @@ for later reporting. These are stored in a list.
</p> </p>
<pre class="displayed-code all-displayed-code code-font"> <pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Copies::attach_error</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">Copies::attach_error</span></span>:<br/>JSON Metadata - <a href="2-jm.html#SP1_1">&#167;1.1</a>, <a href="2-jm.html#SP1_2">&#167;1.2</a>, <a href="2-jm.html#SP1_3_1">&#167;1.3.1</a>, <a href="2-jm.html#SP1_3_2">&#167;1.3.2</a>, <a href="2-jm.html#SP1_3_3">&#167;1.3.3</a>, <a href="2-jm.html#SP1_3_4">&#167;1.3.4</a>, <a href="2-jm.html#SP1_3_5">&#167;1.3.5</a>, <a href="2-jm.html#SP1_4">&#167;1.4</a>, <a href="2-jm.html#SP1_5">&#167;1.5</a>, <a href="2-jm.html#SP1_6">&#167;1.6</a><br/>Extension Bundle Manager - <a href="4-ebm.html#SP3">&#167;3</a>, <a href="4-ebm.html#SP5">&#167;5</a>, <a href="4-ebm.html#SP5_1">&#167;5.1</a>, <a href="4-ebm.html#SP5_1_1">&#167;5.1.1</a>, <a href="4-ebm.html#SP5_1_2">&#167;5.1.2</a>, <a href="4-ebm.html#SP5_1_3">&#167;5.1.3</a><br/>Extension Services - <a href="5-es.html#SP2_2">&#167;2.2</a>, <a href="5-es.html#SP2_2_1">&#167;2.2.1</a>, <a href="5-es.html#SP2_2_1_3">&#167;2.2.1.3</a>, <a href="5-es.html#SP2_2_1_3_2">&#167;2.2.1.3.2</a>, <a href="5-es.html#SP2_3">&#167;2.3</a>, <a href="5-es.html#SP2_4">&#167;2.4</a>, <a href="5-es.html#SP2_4_3">&#167;2.4.3</a>, <a href="5-es.html#SP2_4_3_1_1">&#167;2.4.3.1.1</a>, <a href="5-es.html#SP2_4_3_2_1">&#167;2.4.3.2.1</a>, <a href="5-es.html#SP2_5">&#167;2.5</a>, <a href="5-es.html#SP2_6_3">&#167;2.6.3</a>, <a href="5-es.html#SP8">&#167;8</a>, <a href="5-es.html#SP11_1">&#167;11.1</a><br/>Kit Services - <a href="5-ks.html#SP5_3">&#167;5.3</a>, <a href="5-ks.html#SP5_3_1">&#167;5.3.1</a>, <a href="5-ks.html#SP5_3_1_1">&#167;5.3.1.1</a>, <a href="5-ks.html#SP5_3_2">&#167;5.3.2</a>, <a href="5-ks.html#SP12">&#167;12</a><br/>Language Services - <a href="5-ls.html#SP2">&#167;2</a><br/>Project Services - <a href="5-ps2.html#SP2_3">&#167;2.3</a>, <a href="5-ps2.html#SP17">&#167;17</a>, <a href="5-ps2.html#SP22_1">&#167;22.1</a>, <a href="5-ps2.html#SP22_5">&#167;22.5</a>, <a href="5-ps2.html#SP24">&#167;24</a>, <a href="5-ps2.html#SP35">&#167;35</a>, <a href="5-ps2.html#SP36">&#167;36</a>, <a href="5-ps2.html#SP37_1_2_2">&#167;37.1.2.2</a><br/>Source Text - <a href="6-st.html#SP2">&#167;2</a>, <a href="6-st.html#SP3">&#167;3</a>, <a href="6-st.html#SP6">&#167;6</a>, <a href="6-st.html#SP15">&#167;15</a><br/>Headings - <a href="6-hdn.html#SP11_1">&#167;11.1</a>, <a href="6-hdn.html#SP12_1">&#167;12.1</a>, <a href="6-hdn.html#SP12_2">&#167;12.2</a>, <a href="6-hdn.html#SP14_3">&#167;14.3</a>, <a href="6-hdn.html#SP22_1">&#167;22.1</a>, <a href="6-hdn.html#SP23_2">&#167;23.2</a>, <a href="6-hdn.html#SP22_2">&#167;22.2</a>, <a href="6-hdn.html#SP22_3">&#167;22.3</a><br/>Inclusions - <a href="6-inc.html#SP2_2">&#167;2.2</a>, <a href="6-inc.html#SP2_2_1">&#167;2.2.1</a>, <a href="6-inc.html#SP3_1">&#167;3.1</a>, <a href="6-inc.html#SP6_1_1">&#167;6.1.1</a>, <a href="6-inc.html#SP6_1_2">&#167;6.1.2</a>, <a href="6-inc.html#SP7_1">&#167;7.1</a>, <a href="6-inc.html#SP9_1">&#167;9.1</a>, <a href="6-inc.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax">) {</span> <span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Copies::attach_error</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">Copies::attach_error</span></span>:<br/>JSON Metadata - <a href="2-jm.html#SP1_1">&#167;1.1</a>, <a href="2-jm.html#SP1_2">&#167;1.2</a>, <a href="2-jm.html#SP1_3_1">&#167;1.3.1</a>, <a href="2-jm.html#SP1_3_2">&#167;1.3.2</a>, <a href="2-jm.html#SP1_3_3">&#167;1.3.3</a>, <a href="2-jm.html#SP1_3_4">&#167;1.3.4</a>, <a href="2-jm.html#SP1_3_5">&#167;1.3.5</a>, <a href="2-jm.html#SP1_4">&#167;1.4</a>, <a href="2-jm.html#SP1_5">&#167;1.5</a>, <a href="2-jm.html#SP1_6">&#167;1.6</a><br/>Extension Bundle Manager - <a href="4-ebm.html#SP3">&#167;3</a>, <a href="4-ebm.html#SP5">&#167;5</a>, <a href="4-ebm.html#SP5_1">&#167;5.1</a>, <a href="4-ebm.html#SP5_1_1">&#167;5.1.1</a>, <a href="4-ebm.html#SP5_1_2">&#167;5.1.2</a>, <a href="4-ebm.html#SP5_1_3">&#167;5.1.3</a><br/>Project Bundle Manager - <a href="4-pbm.html#SP3_1">&#167;3.1</a>, <a href="4-pbm.html#SP3_1_1">&#167;3.1.1</a>, <a href="4-pbm.html#SP3_1_2">&#167;3.1.2</a>, <a href="4-pbm.html#SP3_1_3">&#167;3.1.3</a>, <a href="4-pbm.html#SP3_1_3_1">&#167;3.1.3.1</a><br/>Extension Services - <a href="5-es.html#SP2_2">&#167;2.2</a>, <a href="5-es.html#SP2_2_1">&#167;2.2.1</a>, <a href="5-es.html#SP2_2_1_1">&#167;2.2.1.1</a>, <a href="5-es.html#SP2_2_1_3">&#167;2.2.1.3</a>, <a href="5-es.html#SP2_2_1_3_2">&#167;2.2.1.3.2</a>, <a href="5-es.html#SP2_3">&#167;2.3</a>, <a href="5-es.html#SP2_4">&#167;2.4</a>, <a href="5-es.html#SP2_4_3">&#167;2.4.3</a>, <a href="5-es.html#SP2_4_3_1_1">&#167;2.4.3.1.1</a>, <a href="5-es.html#SP2_4_3_2_1">&#167;2.4.3.2.1</a>, <a href="5-es.html#SP2_5">&#167;2.5</a>, <a href="5-es.html#SP2_6_3">&#167;2.6.3</a>, <a href="5-es.html#SP8">&#167;8</a>, <a href="5-es.html#SP11_1">&#167;11.1</a><br/>Kit Services - <a href="5-ks.html#SP5_3">&#167;5.3</a>, <a href="5-ks.html#SP5_3_1">&#167;5.3.1</a>, <a href="5-ks.html#SP5_3_1_1">&#167;5.3.1.1</a>, <a href="5-ks.html#SP5_3_2">&#167;5.3.2</a>, <a href="5-ks.html#SP12">&#167;12</a><br/>Language Services - <a href="5-ls.html#SP2">&#167;2</a><br/>Project Services - <a href="5-ps2.html#SP2_3">&#167;2.3</a>, <a href="5-ps2.html#SP17">&#167;17</a>, <a href="5-ps2.html#SP22_1">&#167;22.1</a>, <a href="5-ps2.html#SP22_5">&#167;22.5</a>, <a href="5-ps2.html#SP24">&#167;24</a>, <a href="5-ps2.html#SP35">&#167;35</a>, <a href="5-ps2.html#SP36">&#167;36</a>, <a href="5-ps2.html#SP37_1_2_2">&#167;37.1.2.2</a><br/>Source Text - <a href="6-st.html#SP2">&#167;2</a>, <a href="6-st.html#SP3">&#167;3</a>, <a href="6-st.html#SP6">&#167;6</a>, <a href="6-st.html#SP15">&#167;15</a><br/>Headings - <a href="6-hdn.html#SP11_1">&#167;11.1</a>, <a href="6-hdn.html#SP12_1">&#167;12.1</a>, <a href="6-hdn.html#SP12_2">&#167;12.2</a>, <a href="6-hdn.html#SP14_3">&#167;14.3</a>, <a href="6-hdn.html#SP22_1">&#167;22.1</a>, <a href="6-hdn.html#SP23_2">&#167;23.2</a>, <a href="6-hdn.html#SP22_2">&#167;22.2</a>, <a href="6-hdn.html#SP22_3">&#167;22.3</a><br/>Inclusions - <a href="6-inc.html#SP2_2">&#167;2.2</a>, <a href="6-inc.html#SP2_2_1">&#167;2.2.1</a>, <a href="6-inc.html#SP3_1">&#167;3.1</a>, <a href="6-inc.html#SP6_1_1">&#167;6.1.1</a>, <a href="6-inc.html#SP6_1_2">&#167;6.1.2</a>, <a href="6-inc.html#SP7_1">&#167;7.1</a>, <a href="6-inc.html#SP9_1">&#167;9.1</a>, <a href="6-inc.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no copy to attach to"</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</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 copy to attach to"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ce.html#SP4" class="function-link"><span class="function-syntax">CopyErrors::supply_attached_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">CE</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><a href="2-ce.html#SP4" class="function-link"><span class="function-syntax">CopyErrors::supply_attached_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">CE</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">CE</span><span class="plain-syntax">, </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">errors_reading_source_text</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">CE</span><span class="plain-syntax">, </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">errors_reading_source_text</span><span class="plain-syntax">);</span>

View file

@ -132,12 +132,200 @@ not a file, false if we know the reverse, and otherwise not applicable.
<span class="plain-syntax">}</span> <span class="plain-syntax">}</span>
<span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="function-syntax">ProjectBundleManager::claim_folder_as_copy</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">ProjectBundleManager::claim_folder_as_copy</span></span>:<br/>Inbuild Control - <a href="1-ic.html#SP19">&#167;19</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span> <span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="function-syntax">ProjectBundleManager::claim_folder_as_copy</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">ProjectBundleManager::claim_folder_as_copy</span></span>:<br/>Inbuild Control - <a href="1-ic.html#SP19">&#167;19</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">canary</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Source"</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="string-syntax">"story.ni"</span><span 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">P</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TextFiles::exists</span><span class="plain-syntax">(</span><span class="identifier-syntax">canary</span><span class="plain-syntax">))</span> <span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><a href="4-pbm.html#SP2" class="function-link"><span class="function-syntax">ProjectBundleManager::new_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-pbm.html#SP2" class="function-link"><span class="function-syntax">ProjectBundleManager::new_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pbm.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Police extraneous contents</span><span class="named-paragraph-number">3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">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">C</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span> <span class="plain-syntax">}</span>
</pre> </pre>
<p class="commentary firstcommentary"><a id="SP3_1" class="paragraph-anchor"></a><b>&#167;3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Police extraneous contents</span><span class="named-paragraph-number">3.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">uuid_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">source_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Directories::listing</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Platform::is_folder_separator</span><span class="plain-syntax">(</span><span class="identifier-syntax">Str::get_last_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">subdir</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">subdir</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_last_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">subdir</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">subdir</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Source"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pbm.html#SP3_1_1" class="named-paragraph-link"><span class="named-paragraph">Police Source contents</span><span class="named-paragraph-number">3.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">subdir</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Build"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pbm.html#SP3_1_2" class="named-paragraph-link"><span class="named-paragraph">Police Build contents</span><span class="named-paragraph-number">3.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">subdir</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Index"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pbm.html#SP3_1_3" class="named-paragraph-link"><span class="named-paragraph">Police Index contents</span><span class="named-paragraph-number">3.1.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">subdir</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Details"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pbm.html#SP3_1_4" class="named-paragraph-link"><span class="named-paragraph">Police spurious Details contents</span><span class="named-paragraph-number">3.1.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"the project directory '%S' contains a subdirectory called '%S', "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"which I don't recognise"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">subdir</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PROJECT_MALFORMED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">error_text</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">subdir</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"manifest.plist"</span><span class="plain-syntax">)) </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Metadata.iFiction"</span><span class="plain-syntax">)) </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"notes.rtf"</span><span class="plain-syntax">)) </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Release.blurb"</span><span class="plain-syntax">)) </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Settings.plist"</span><span class="plain-syntax">)) </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Skein.skein"</span><span class="plain-syntax">)) </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"uuid.txt"</span><span class="plain-syntax">)) { </span><span class="identifier-syntax">uuid_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">continue</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"the project directory '%S' contains a file called '%S', "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"which I don't recognise"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">entry</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PROJECT_MALFORMED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">error_text</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">uuid_found</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"the project directory '%S' does not contain a 'uuid.txt' file"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">METADATA_MALFORMED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">error_text</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">source_found</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"the project directory '%S' does not contain a 'story.ni' source file in a "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"'Source' subdirectory"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">METADATA_MALFORMED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">error_text</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-pbm.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_1_1" class="paragraph-anchor"></a><b>&#167;3.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Police Source contents</span><span class="named-paragraph-number">3.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">Q</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">subdir</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Directories::listing</span><span class="plain-syntax">(</span><span class="identifier-syntax">Q</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Platform::is_folder_separator</span><span class="plain-syntax">(</span><span class="identifier-syntax">Str::get_last_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">subdir</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">subdir</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_last_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">subdir</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"the 'Source' subdirectory of the project directory '%S' contains a "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"further subdirectory called '%S', but should not have further subdirectories"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">subdir</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PROJECT_MALFORMED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">error_text</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">subdir</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"story.ni"</span><span class="plain-syntax">)) { </span><span class="identifier-syntax">source_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">continue</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"the 'Source' subdirectory of the project directory '%S' contains a "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"file called '%S', but should only contain the source text file 'story.ni'"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">entry</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PROJECT_MALFORMED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">error_text</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-pbm.html#SP3_1">&#167;3.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_1_2" class="paragraph-anchor"></a><b>&#167;3.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Police Build contents</span><span class="named-paragraph-number">3.1.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">Q</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">subdir</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Directories::listing</span><span class="plain-syntax">(</span><span class="identifier-syntax">Q</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Platform::is_folder_separator</span><span class="plain-syntax">(</span><span class="identifier-syntax">Str::get_last_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">subdir</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">subdir</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_last_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">subdir</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"the 'Build' subdirectory of the project directory '%S' contains a "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"further subdirectory called '%S', but should not have further subdirectories"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">subdir</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PROJECT_MALFORMED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">error_text</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">subdir</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-pbm.html#SP3_1">&#167;3.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_1_3" class="paragraph-anchor"></a><b>&#167;3.1.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Police Index contents</span><span class="named-paragraph-number">3.1.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">Q</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">subdir</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Directories::listing</span><span class="plain-syntax">(</span><span class="identifier-syntax">Q</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Platform::is_folder_separator</span><span class="plain-syntax">(</span><span class="identifier-syntax">Str::get_last_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">subdir</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">subdir</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_last_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">subdir</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">subdir</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Details"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Q</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pathnames::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Q</span><span class="plain-syntax">, </span><span class="identifier-syntax">subdir</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pbm.html#SP3_1_3_1" class="named-paragraph-link"><span class="named-paragraph">Check for non-HTML files</span><span class="named-paragraph-number">3.1.3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"the 'Index' subdirectory of the project directory '%S' contains a "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"further subdirectory called '%S', but can only have one, 'Details'"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">subdir</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PROJECT_MALFORMED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">error_text</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">subdir</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pbm.html#SP3_1_3_1" class="named-paragraph-link"><span class="named-paragraph">Check for non-HTML files</span><span class="named-paragraph-number">3.1.3.1</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-pbm.html#SP3_1">&#167;3.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_1_3_1" class="paragraph-anchor"></a><b>&#167;3.1.3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check for non-HTML files</span><span class="named-paragraph-number">3.1.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">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Directories::listing</span><span class="plain-syntax">(</span><span class="identifier-syntax">Q</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Platform::is_folder_separator</span><span class="plain-syntax">(</span><span class="identifier-syntax">Str::get_last_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">)) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">ext</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::write_extension</span><span class="plain-syntax">(</span><span class="identifier-syntax">ext</span><span class="plain-syntax">, </span><span class="identifier-syntax">Filenames::from_text</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">ext</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">".html"</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"the 'Index' subdirectory of the project directory '%S' contains a "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"file called '%S', but can only contain HTML files"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">entry</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PROJECT_MALFORMED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">error_text</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<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="4-pbm.html#SP3_1_3">&#167;3.1.3</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP3_1_4" class="paragraph-anchor"></a><b>&#167;3.1.4. </b>For now, we will allow a subdirectory called Details to exist, because a bug
in intest at one point caused the temporary workspace projects used when testing Inform
to be created with such a subdirectory.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Police spurious Details contents</span><span class="named-paragraph-number">3.1.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> ;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-pbm.html#SP3_1">&#167;3.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Searching. </b>Here we look through a nest to find all projects matching the supplied <p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Searching. </b>Here we look through a nest to find all projects matching the supplied
requirements; though in fact... projects are not nesting birds. requirements; though in fact... projects are not nesting birds.
</p> </p>

View file

@ -248,11 +248,33 @@ by the local <span class="extract"><span class="extract-syntax">\n</span></span>
</p> </p>
<pre class="displayed-code all-displayed-code code-font"> <pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">;</span> <span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">, </span><span class="identifier-syntax">commented_out</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">quoted</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">content_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TextFiles::utf8_fgetc</span><span class="plain-syntax">(</span><span class="identifier-syntax">EXTF</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) != </span><span class="identifier-syntax">EOF</span><span class="plain-syntax">) {</span> <span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TextFiles::utf8_fgetc</span><span class="plain-syntax">(</span><span class="identifier-syntax">EXTF</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) != </span><span class="identifier-syntax">EOF</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="constant-syntax">0xFEFF</span><span class="plain-syntax">) </span><span class="reserved-syntax">continue</span><span class="plain-syntax">; </span><span class="comment-syntax"> skip the optional Unicode BOM pseudo-character</span> <span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="constant-syntax">0xFEFF</span><span class="plain-syntax">) </span><span class="reserved-syntax">continue</span><span class="plain-syntax">; </span><span class="comment-syntax"> skip the optional Unicode BOM pseudo-character</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\x0a'</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\x0d'</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\n'</span><span class="plain-syntax">)) </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span> <span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">commented_out</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">titling_line</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">']'</span><span class="plain-syntax">) </span><span class="identifier-syntax">commented_out</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">quoted</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'"'</span><span class="plain-syntax">) </span><span class="identifier-syntax">quoted</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">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">titling_line</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'['</span><span class="plain-syntax">) </span><span class="identifier-syntax">commented_out</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'"'</span><span class="plain-syntax">) </span><span class="identifier-syntax">quoted</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\x0a'</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\x0d'</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\n'</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">content_found</span><span class="plain-syntax">) </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="character-syntax">' '</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Characters::is_whitespace</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">content_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">titling_line</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">content_found</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">, </span><span class="string-syntax">"extension doesn't have an identifying title line at the top"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">EXT_MISWORDED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">error_text</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">error_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span> <span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::trim_white_space</span><span class="plain-syntax">(</span><span class="identifier-syntax">titling_line</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><span class="identifier-syntax">Str::trim_white_space</span><span class="plain-syntax">(</span><span class="identifier-syntax">titling_line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-wrk.html#SP5" class="function-link"><span class="function-syntax">Works::normalise_casing_mixed</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">titling_line</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><a href="2-wrk.html#SP5" class="function-link"><span class="function-syntax">Works::normalise_casing_mixed</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">titling_line</span><span class="plain-syntax">);</span>
@ -345,14 +367,37 @@ not a situation we need to contend with.
</p> </p>
<pre class="displayed-code all-displayed-code code-font"> <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">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">titling_line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"(%c*?) By (%c*)"</span><span class="plain-syntax">)) {</span> <span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">quote_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">brackets_underflowed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">brackets_in_author</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">Str::copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">claimed_title</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0]);</span> <span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">which</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="identifier-syntax">bl</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">claimed_author_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1]);</span> <span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">titling_line</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span> <span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">titling_line</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">claimed_title</span><span class="plain-syntax">, </span><span class="identifier-syntax">titling_line</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'('</span><span class="plain-syntax">) { </span><span class="identifier-syntax">bl</span><span class="plain-syntax">++; </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">which</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">) </span><span class="identifier-syntax">brackets_in_author</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">c</span><span class="plain-syntax"> == </span><span class="character-syntax">')'</span><span class="plain-syntax">) { </span><span class="identifier-syntax">bl</span><span class="plain-syntax">--; </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bl</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">brackets_underflowed</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">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\"'</span><span class="plain-syntax">) </span><span class="identifier-syntax">quote_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">bl</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Str::includes_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">titling_line</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">" By "</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">which</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">i</span><span class="plain-syntax"> += </span><span class="constant-syntax">3</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">which</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">which</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">claimed_title</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">claimed_author_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">bl</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">brackets_underflowed</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">EXT_MISWORDED_CE</span><span class="plain-syntax">, -1,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"brackets '(' and ')' are used in an unbalanced way in the titling line"</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">brackets_in_author</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">EXT_MISWORDED_CE</span><span class="plain-syntax">, -1,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"brackets '(' and ')' are used as part of the author name in the titling line"</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">quote_found</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">EXT_MISWORDED_CE</span><span class="plain-syntax">, -1,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"the titling line includes a double-quotation mark"</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">which</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">EXT_MISWORDED_CE</span><span class="plain-syntax">, -1,</span> <span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">EXT_MISWORDED_CE</span><span class="plain-syntax">, -1,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"the titling line does not give both author and title"</span><span class="plain-syntax">));</span> <span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"the titling line does not give both author and title"</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> }</span> <span class="plain-syntax"> </span><span class="identifier-syntax">Str::trim_white_space</span><span class="plain-syntax">(</span><span class="identifier-syntax">claimed_title</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::trim_white_space</span><span class="plain-syntax">(</span><span class="identifier-syntax">claimed_author_name</span><span class="plain-syntax">);</span>
</pre> </pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-es.html#SP2_2_1_3">&#167;2.2.1.3</a>.</li></ul> <ul class="endnotetexts"><li>This code is used in <a href="5-es.html#SP2_2_1_3">&#167;2.2.1.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_2_1_3_3" class="paragraph-anchor"></a><b>&#167;2.2.1.3.3. </b>Similarly, extension titles are not allowed to contain parentheses, so <p class="commentary firstcommentary"><a id="SP2_2_1_3_3" class="paragraph-anchor"></a><b>&#167;2.2.1.3.3. </b>Similarly, extension titles are not allowed to contain parentheses, so
@ -954,6 +999,8 @@ range, we flatten them from general ISO to plain ASCII.
</p> </p>
<pre class="displayed-code all-displayed-code code-font"> <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">VersionNumbers::is_null</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">synopsis</span><span class="plain-syntax">, </span><span class="string-syntax">"version %v of "</span><span class="plain-syntax">, &amp;(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">synopsis</span><span class="plain-syntax">, </span><span class="string-syntax">"%S by %S"</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">synopsis</span><span class="plain-syntax">, </span><span class="string-syntax">"%S by %S"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">,</span> <span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">author_name</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">author_name</span><span class="plain-syntax">);</span>

View file

@ -12,6 +12,7 @@ pathname *path_to_inbuild = NULL;
int inbuild_task = INSPECT_TTASK; int inbuild_task = INSPECT_TTASK;
pathname *path_to_tools = NULL; pathname *path_to_tools = NULL;
int dry_run_mode = FALSE, build_trace_mode = FALSE, confirmed = FALSE; int dry_run_mode = FALSE, build_trace_mode = FALSE, confirmed = FALSE;
int contents_of_used = FALSE, recursive = FALSE;
inbuild_nest *destination_nest = NULL; inbuild_nest *destination_nest = NULL;
inbuild_registry *selected_registry = NULL; inbuild_registry *selected_registry = NULL;
text_stream *filter_text = NULL; text_stream *filter_text = NULL;
@ -305,8 +306,21 @@ inbuild_copy *Main::file_or_path_to_copy(text_stream *arg, int throwing_error) {
} }
void Main::add_file_or_path_as_target(text_stream *arg, int throwing_error) { void Main::add_file_or_path_as_target(text_stream *arg, int throwing_error) {
int is_folder = Platform::is_folder_separator(Str::get_last_char(arg));
inbuild_copy *C = Main::file_or_path_to_copy(arg, throwing_error); inbuild_copy *C = Main::file_or_path_to_copy(arg, throwing_error);
if (C) Main::add_target(C); if (C) {
Main::add_target(C);
} else if ((recursive) && (is_folder)) {
pathname *P = Pathnames::from_text(arg);
linked_list *L = Directories::listing(P);
text_stream *entry;
LOOP_OVER_LINKED_LIST(entry, text_stream, L) {
TEMPORARY_TEXT(FILENAME)
WRITE_TO(FILENAME, "%p%c%S", P, FOLDER_SEPARATOR, entry);
Main::add_file_or_path_as_target(FILENAME, throwing_error);
DISCARD_TEXT(FILENAME)
}
}
} }
@h Command line. @h Command line.
@ -331,6 +345,7 @@ other options to the selection defined here.
@e BUILD_TRACE_CLSW @e BUILD_TRACE_CLSW
@e TOOLS_CLSW @e TOOLS_CLSW
@e CONTENTS_OF_CLSW @e CONTENTS_OF_CLSW
@e RECURSIVE_CLSW
@e MATCHING_CLSW @e MATCHING_CLSW
@e COPY_TO_CLSW @e COPY_TO_CLSW
@e SYNC_TO_CLSW @e SYNC_TO_CLSW
@ -391,6 +406,8 @@ other options to the selection defined here.
L"apply to all works in nest(s) matching requirement X"); L"apply to all works in nest(s) matching requirement X");
CommandLine::declare_switch(CONTENTS_OF_CLSW, L"contents-of", 2, CommandLine::declare_switch(CONTENTS_OF_CLSW, L"contents-of", 2,
L"apply to all targets in the directory X"); L"apply to all targets in the directory X");
CommandLine::declare_boolean_switch(RECURSIVE_CLSW, L"recursive", 1,
L"run -contents-of recursively to look through subdirectories too", FALSE);
CommandLine::declare_switch(VERIFY_REGISTRY_CLSW, L"verify-registry", 2, CommandLine::declare_switch(VERIFY_REGISTRY_CLSW, L"verify-registry", 2,
L"verify roster.json metadata of registry in the directory X"); L"verify roster.json metadata of registry in the directory X");
CommandLine::declare_switch(BUILD_REGISTRY_CLSW, L"build-registry", 2, CommandLine::declare_switch(BUILD_REGISTRY_CLSW, L"build-registry", 2,
@ -435,8 +452,11 @@ void Main::option(int id, int val, text_stream *arg, void *state) {
case BUILD_MISSING_CLSW: inbuild_task = BUILD_MISSING_TTASK; break; case BUILD_MISSING_CLSW: inbuild_task = BUILD_MISSING_TTASK; break;
case TOOLS_CLSW: path_to_tools = Pathnames::from_text(arg); break; case TOOLS_CLSW: path_to_tools = Pathnames::from_text(arg); break;
case MATCHING_CLSW: filter_text = Str::duplicate(arg); break; case MATCHING_CLSW: filter_text = Str::duplicate(arg); break;
case CONTENTS_OF_CLSW: case CONTENTS_OF_CLSW: contents_of_used = TRUE;
Main::add_directory_contents_targets(Pathnames::from_text(arg)); break; Main::add_directory_contents_targets(Pathnames::from_text(arg)); break;
case RECURSIVE_CLSW: recursive = val;
if (contents_of_used) Errors::fatal("-recursive must be used before -contents-of");
break;
case DRY_CLSW: dry_run_mode = val; break; case DRY_CLSW: dry_run_mode = val; break;
case BUILD_TRACE_CLSW: build_trace_mode = val; break; case BUILD_TRACE_CLSW: build_trace_mode = val; break;
case COPY_TO_CLSW: inbuild_task = COPY_TO_TTASK; case COPY_TO_CLSW: inbuild_task = COPY_TO_TTASK;

View file

@ -22,6 +22,7 @@ usage: inbuild [-TASK] TARGET1 TARGET2 ...
-preprocess-html X construct HTML page based on X -preprocess-html X construct HTML page based on X
-preprocess-html-to X set destination for -preprocess-html to be X -preprocess-html-to X set destination for -preprocess-html to be X
-rebuild completely rebuild target(s) -rebuild completely rebuild target(s)
-recursive run -contents-of recursively to look through subdirectories too (default is -no-recursive)
-no-repair don't quietly fix missing or incorrect extension metadata (default is -repair) -no-repair don't quietly fix missing or incorrect extension metadata (default is -repair)
-results X write HTML report file to X (for use within Inform GUI apps) -results X write HTML report file to X (for use within Inform GUI apps)
-sync-to X forcibly copy target(s) to nest X, even if prior version already there -sync-to X forcibly copy target(s) to nest X, even if prior version already there

View file

@ -20,6 +20,7 @@ fields are blank.
@e EXT_TITLE_TOO_LONG_CE @e EXT_TITLE_TOO_LONG_CE
@e EXT_AUTHOR_TOO_LONG_CE @e EXT_AUTHOR_TOO_LONG_CE
@e EXT_RANEOUS_CE @e EXT_RANEOUS_CE
@e PROJECT_MALFORMED_CE
@e LANGUAGE_UNAVAILABLE_CE @e LANGUAGE_UNAVAILABLE_CE
@e LANGUAGE_DEFICIENT_CE @e LANGUAGE_DEFICIENT_CE
@e LEXER_CE /* an error generated by the |words| module */ @e LEXER_CE /* an error generated by the |words| module */
@ -135,6 +136,7 @@ void CopyErrors::write(OUTPUT_STREAM, copy_error *CE) {
case EXT_BAD_DIRNAME_CE: WRITE("extension directory name wrong: %S", CE->details); break; case EXT_BAD_DIRNAME_CE: WRITE("extension directory name wrong: %S", CE->details); break;
case EXT_BAD_FILENAME_CE: WRITE("extension filename wrong: %S", CE->details); break; case EXT_BAD_FILENAME_CE: WRITE("extension filename wrong: %S", CE->details); break;
case EXT_RANEOUS_CE: WRITE("extraneous content: %S", CE->details); break; case EXT_RANEOUS_CE: WRITE("extraneous content: %S", CE->details); break;
case PROJECT_MALFORMED_CE: WRITE("project malformed: %S", CE->details); break;
case METADATA_MALFORMED_CE: WRITE("%S has incorrect metadata: %S", case METADATA_MALFORMED_CE: WRITE("%S has incorrect metadata: %S",
CE->copy->edition->work->genre->genre_name, CE->details); break; CE->copy->edition->work->genre->genre_name, CE->details); break;
case EXT_TITLE_TOO_LONG_CE: WRITE("title too long: %d characters (max is %d)", case EXT_TITLE_TOO_LONG_CE: WRITE("title too long: %d characters (max is %d)",

View file

@ -71,12 +71,175 @@ void ProjectBundleManager::claim_as_copy(inbuild_genre *gen, inbuild_copy **C,
} }
inbuild_copy *ProjectBundleManager::claim_folder_as_copy(pathname *P) { inbuild_copy *ProjectBundleManager::claim_folder_as_copy(pathname *P) {
filename *canary = Filenames::in(Pathnames::down(P, I"Source"), I"story.ni"); if (Directories::exists(P) == FALSE) return NULL;
if (TextFiles::exists(canary)) inbuild_copy *C = ProjectBundleManager::new_copy(Pathnames::directory_name(P), P);
return ProjectBundleManager::new_copy(Pathnames::directory_name(P), P); @<Police extraneous contents@>;
return NULL; return C;
} }
@<Police extraneous contents@> =
int uuid_found = FALSE, source_found = FALSE;
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))) {
TEMPORARY_TEXT(subdir)
WRITE_TO(subdir, "%S", entry);
Str::delete_last_character(subdir);
if (Str::eq_insensitive(subdir, I"Source")) {
@<Police Source contents@>;
} else if (Str::eq_insensitive(subdir, I"Build")) {
@<Police Build contents@>;
} else if (Str::eq_insensitive(subdir, I"Index")) {
@<Police Index contents@>;
} else if (Str::eq_insensitive(subdir, I"Details")) {
@<Police spurious Details contents@>;
} else {
TEMPORARY_TEXT(error_text)
WRITE_TO(error_text,
"the project directory '%S' contains a subdirectory called '%S', "
"which I don't recognise",
Pathnames::directory_name(P), subdir);
Copies::attach_error(C, CopyErrors::new_T(PROJECT_MALFORMED_CE, -1, error_text));
DISCARD_TEXT(error_text)
}
DISCARD_TEXT(subdir)
} else {
if (Str::eq_insensitive(entry, I"manifest.plist")) continue;
if (Str::eq_insensitive(entry, I"Metadata.iFiction")) continue;
if (Str::eq_insensitive(entry, I"notes.rtf")) continue;
if (Str::eq_insensitive(entry, I"Release.blurb")) continue;
if (Str::eq_insensitive(entry, I"Settings.plist")) continue;
if (Str::eq_insensitive(entry, I"Skein.skein")) continue;
if (Str::eq_insensitive(entry, I"uuid.txt")) { uuid_found = TRUE; continue; }
TEMPORARY_TEXT(error_text)
WRITE_TO(error_text,
"the project directory '%S' contains a file called '%S', "
"which I don't recognise",
Pathnames::directory_name(P), entry);
Copies::attach_error(C, CopyErrors::new_T(PROJECT_MALFORMED_CE, -1, error_text));
DISCARD_TEXT(error_text)
}
}
if (uuid_found == FALSE) {
TEMPORARY_TEXT(error_text)
WRITE_TO(error_text,
"the project directory '%S' does not contain a 'uuid.txt' file",
Pathnames::directory_name(P));
Copies::attach_error(C, CopyErrors::new_T(METADATA_MALFORMED_CE, -1, error_text));
DISCARD_TEXT(error_text)
}
if (source_found == FALSE) {
TEMPORARY_TEXT(error_text)
WRITE_TO(error_text,
"the project directory '%S' does not contain a 'story.ni' source file in a "
"'Source' subdirectory",
Pathnames::directory_name(P));
Copies::attach_error(C, CopyErrors::new_T(METADATA_MALFORMED_CE, -1, error_text));
DISCARD_TEXT(error_text)
}
@<Police Source contents@> =
pathname *Q = Pathnames::down(P, subdir);
linked_list *L = Directories::listing(Q);
text_stream *entry;
LOOP_OVER_LINKED_LIST(entry, text_stream, L) {
if (Platform::is_folder_separator(Str::get_last_char(entry))) {
TEMPORARY_TEXT(subdir)
WRITE_TO(subdir, "%S", entry);
Str::delete_last_character(subdir);
TEMPORARY_TEXT(error_text)
WRITE_TO(error_text,
"the 'Source' subdirectory of the project directory '%S' contains a "
"further subdirectory called '%S', but should not have further subdirectories",
Pathnames::directory_name(P), subdir);
Copies::attach_error(C, CopyErrors::new_T(PROJECT_MALFORMED_CE, -1, error_text));
DISCARD_TEXT(error_text)
DISCARD_TEXT(subdir)
} else {
if (Str::eq_insensitive(entry, I"story.ni")) { source_found = TRUE; continue; }
TEMPORARY_TEXT(error_text)
WRITE_TO(error_text,
"the 'Source' subdirectory of the project directory '%S' contains a "
"file called '%S', but should only contain the source text file 'story.ni'",
Pathnames::directory_name(P), entry);
Copies::attach_error(C, CopyErrors::new_T(PROJECT_MALFORMED_CE, -1, error_text));
DISCARD_TEXT(error_text)
}
}
@<Police Build contents@> =
pathname *Q = Pathnames::down(P, subdir);
linked_list *L = Directories::listing(Q);
text_stream *entry;
LOOP_OVER_LINKED_LIST(entry, text_stream, L) {
if (Platform::is_folder_separator(Str::get_last_char(entry))) {
TEMPORARY_TEXT(subdir)
WRITE_TO(subdir, "%S", entry);
Str::delete_last_character(subdir);
TEMPORARY_TEXT(error_text)
WRITE_TO(error_text,
"the 'Build' subdirectory of the project directory '%S' contains a "
"further subdirectory called '%S', but should not have further subdirectories",
Pathnames::directory_name(P), subdir);
Copies::attach_error(C, CopyErrors::new_T(PROJECT_MALFORMED_CE, -1, error_text));
DISCARD_TEXT(error_text)
DISCARD_TEXT(subdir)
}
}
@<Police Index contents@> =
pathname *Q = Pathnames::down(P, subdir);
linked_list *L = Directories::listing(Q);
text_stream *entry;
LOOP_OVER_LINKED_LIST(entry, text_stream, L) {
if (Platform::is_folder_separator(Str::get_last_char(entry))) {
TEMPORARY_TEXT(subdir)
WRITE_TO(subdir, "%S", entry);
Str::delete_last_character(subdir);
if (Str::eq_insensitive(subdir, I"Details")) {
Q = Pathnames::down(Q, subdir);
@<Check for non-HTML files@>;
} else {
TEMPORARY_TEXT(error_text)
WRITE_TO(error_text,
"the 'Index' subdirectory of the project directory '%S' contains a "
"further subdirectory called '%S', but can only have one, 'Details'",
Pathnames::directory_name(P), subdir);
Copies::attach_error(C, CopyErrors::new_T(PROJECT_MALFORMED_CE, -1, error_text));
DISCARD_TEXT(error_text)
}
DISCARD_TEXT(subdir)
}
}
@<Check for non-HTML files@>;
@<Check for non-HTML files@> =
linked_list *L = Directories::listing(Q);
text_stream *entry;
LOOP_OVER_LINKED_LIST(entry, text_stream, L) {
if (Platform::is_folder_separator(Str::get_last_char(entry)) == FALSE) {
TEMPORARY_TEXT(ext)
Filenames::write_extension(ext, Filenames::from_text(entry));
if (Str::eq_insensitive(ext, I".html") == FALSE) {
TEMPORARY_TEXT(error_text)
WRITE_TO(error_text,
"the 'Index' subdirectory of the project directory '%S' contains a "
"file called '%S', but can only contain HTML files",
Pathnames::directory_name(P), entry);
Copies::attach_error(C, CopyErrors::new_T(PROJECT_MALFORMED_CE, -1, error_text));
DISCARD_TEXT(error_text)
}
}
}
@ For now, we will allow a subdirectory called Details to exist, because a bug
in intest at one point caused the temporary workspace projects used when testing Inform
to be created with such a subdirectory.
@<Police spurious Details contents@> =
;
@h Searching. @h Searching.
Here we look through a nest to find all projects matching the supplied Here we look through a nest to find all projects matching the supplied
requirements; though in fact... projects are not nesting birds. requirements; though in fact... projects are not nesting birds.

View file

@ -170,11 +170,33 @@ alone, and the version number is returned.
by the local |\n| for good measure. by the local |\n| for good measure.
@<Read the titling line of the extension and normalise its casing@> = @<Read the titling line of the extension and normalise its casing@> =
int c; int c, commented_out = FALSE, quoted = FALSE, content_found = FALSE;
while ((c = TextFiles::utf8_fgetc(EXTF, NULL, NULL)) != EOF) { while ((c = TextFiles::utf8_fgetc(EXTF, NULL, NULL)) != EOF) {
if (c == 0xFEFF) continue; /* skip the optional Unicode BOM pseudo-character */ if (c == 0xFEFF) continue; /* skip the optional Unicode BOM pseudo-character */
if ((c == '\x0a') || (c == '\x0d') || (c == '\n')) break; if (commented_out) {
PUT_TO(titling_line, c); if (c == ']') commented_out = FALSE;
} else if (quoted) {
if (c == '"') quoted = FALSE;
PUT_TO(titling_line, c);
} else {
if (c == '[') commented_out = TRUE;
else {
if (c == '"') quoted = TRUE;
else if ((c == '\x0a') || (c == '\x0d') || (c == '\n')) {
if (content_found) break;
c = ' ';
} else if (Characters::is_whitespace(c) == FALSE) {
content_found = TRUE;
}
PUT_TO(titling_line, c);
}
}
}
if (content_found == FALSE) {
TEMPORARY_TEXT(error_text)
WRITE_TO(error_text, "extension doesn't have an identifying title line at the top");
Copies::attach_error(C, CopyErrors::new_T(EXT_MISWORDED_CE, -1, error_text));
DISCARD_TEXT(error_text)
} }
Str::trim_white_space(titling_line); Str::trim_white_space(titling_line);
Works::normalise_casing_mixed(titling_line); Works::normalise_casing_mixed(titling_line);
@ -244,14 +266,37 @@ allowed to contain this word, so "North By Northwest By Cary Grant" is
not a situation we need to contend with. not a situation we need to contend with.
@<Divide the remaining text into a claimed author name and title, divided by By@> = @<Divide the remaining text into a claimed author name and title, divided by By@> =
if (Regexp::match(&mr, titling_line, L"(%c*?) By (%c*)")) { int quote_found = FALSE, brackets_underflowed = FALSE, brackets_in_author = FALSE;
Str::copy(claimed_title, mr.exp[0]); int which = 1, bl = 0;
Str::copy(claimed_author_name, mr.exp[1]); for (int i=0; i<Str::len(titling_line); i++) {
} else { wchar_t c = Str::get_at(titling_line, i);
Str::copy(claimed_title, titling_line); if (c == '(') { bl++; if (which == 2) brackets_in_author = TRUE; }
if (c == ')') { bl--; if (bl < 0) brackets_underflowed = TRUE; }
if (c == '\"') quote_found = TRUE;
if ((bl == 0) && (Str::includes_at(titling_line, i, I" By "))) {
if (which == 1) {
i += 3;
which = 2;
continue;
}
}
if (which == 1) PUT_TO(claimed_title, c);
else PUT_TO(claimed_author_name, c);
}
if ((bl != 0) || (brackets_underflowed))
Copies::attach_error(C, CopyErrors::new_T(EXT_MISWORDED_CE, -1,
I"brackets '(' and ')' are used in an unbalanced way in the titling line"));
else if (brackets_in_author)
Copies::attach_error(C, CopyErrors::new_T(EXT_MISWORDED_CE, -1,
I"brackets '(' and ')' are used as part of the author name in the titling line"));
if (quote_found)
Copies::attach_error(C, CopyErrors::new_T(EXT_MISWORDED_CE, -1,
I"the titling line includes a double-quotation mark"));
if (which == 1)
Copies::attach_error(C, CopyErrors::new_T(EXT_MISWORDED_CE, -1, Copies::attach_error(C, CopyErrors::new_T(EXT_MISWORDED_CE, -1,
I"the titling line does not give both author and title")); I"the titling line does not give both author and title"));
} Str::trim_white_space(claimed_title);
Str::trim_white_space(claimed_author_name);
@ Similarly, extension titles are not allowed to contain parentheses, so @ Similarly, extension titles are not allowed to contain parentheses, so
this is unambiguous. this is unambiguous.
@ -769,6 +814,8 @@ we dare not assume |stdout| can manage characters outside the basic ASCII
range, we flatten them from general ISO to plain ASCII. range, we flatten them from general ISO to plain ASCII.
@<Concoct a synopsis for the extension to be read@> = @<Concoct a synopsis for the extension to be read@> =
if (VersionNumbers::is_null(E->as_copy->edition->version) == FALSE)
WRITE_TO(synopsis, "version %v of ", &(E->as_copy->edition->version));
WRITE_TO(synopsis, "%S by %S", WRITE_TO(synopsis, "%S by %S",
E->as_copy->edition->work->title, E->as_copy->edition->work->title,
E->as_copy->edition->work->author_name); E->as_copy->edition->work->author_name);

View file

@ -1,16 +1,16 @@
Total memory consumption was 123156K = 120 MB Total memory consumption was 123162K = 120 MB
---- was used for 2063834 objects, in 367781 frames in 0 x 800K = 0K = 0 MB: ---- was used for 2063851 objects, in 367798 frames in 0 x 800K = 0K = 0 MB:
33.1% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes 33.1% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
20.9% text_stream_array 4684 x 100 = 468400 objects, 26380288 bytes 20.9% text_stream_array 4684 x 100 = 468400 objects, 26380288 bytes
19.7% linked_list 44520 objects, 24931200 bytes 19.7% linked_list 44526 objects, 24934560 bytes
11.2% inter_symbol_array 133 x 1024 = 136192 objects, 14168224 bytes 11.2% inter_symbol_array 133 x 1024 = 136192 objects, 14168224 bytes
10.7% inter_error_stash_array 103 x 1024 = 105472 objects, 13503712 bytes 10.7% inter_error_stash_array 103 x 1024 = 105472 objects, 13503712 bytes
8.2% parse_node 130369 objects, 10429520 bytes 8.2% parse_node 130369 objects, 10429520 bytes
6.0% verb_conjugation 164 objects, 7610912 bytes 6.0% verb_conjugation 164 objects, 7610912 bytes
4.4% parse_node_annotation_array 348 x 500 = 174000 objects, 5579136 bytes 4.4% parse_node_annotation_array 348 x 500 = 174000 objects, 5579136 bytes
2.8% scan_directory 866 objects, 3574848 bytes 2.8% scan_directory 872 objects, 3599616 bytes
2.6% pcalc_prop_array 25 x 1000 = 25000 objects, 3400800 bytes 2.6% pcalc_prop_array 25 x 1000 = 25000 objects, 3400800 bytes
2.5% inter_name_array 67 x 1000 = 67000 objects, 3218144 bytes 2.5% inter_name_array 67 x 1000 = 67000 objects, 3218144 bytes
2.1% kind_array 67 x 1000 = 67000 objects, 2682144 bytes 2.1% kind_array 67 x 1000 = 67000 objects, 2682144 bytes
@ -94,14 +94,14 @@ Total memory consumption was 123156K = 120 MB
---- parse_node_tree 33 objects, 28776 bytes ---- parse_node_tree 33 objects, 28776 bytes
---- action_pattern_array 7 x 100 = 700 objects, 28224 bytes ---- action_pattern_array 7 x 100 = 700 objects, 28224 bytes
---- shared_variable_set_array 6 x 100 = 600 objects, 24192 bytes ---- shared_variable_set_array 6 x 100 = 600 objects, 24192 bytes
---- filename 591 objects, 23640 bytes ---- filename 590 objects, 23600 bytes
---- property 146 objects, 22192 bytes ---- property 146 objects, 22192 bytes
---- backdrops_data 672 objects, 21504 bytes ---- backdrops_data 672 objects, 21504 bytes
---- inter_node_list 646 objects, 20672 bytes ---- inter_node_list 646 objects, 20672 bytes
---- nonlocal_variable 94 objects, 20304 bytes ---- nonlocal_variable 94 objects, 20304 bytes
---- pipeline_step 15 objects, 20280 bytes ---- pipeline_step 15 objects, 20280 bytes
---- action_name 90 objects, 20160 bytes ---- action_name 90 objects, 20160 bytes
---- pathname 487 objects, 19480 bytes ---- pathname 492 objects, 19680 bytes
---- timed_rules_rfd_data 401 objects, 19248 bytes ---- timed_rules_rfd_data 401 objects, 19248 bytes
---- method 390 objects, 18720 bytes ---- method 390 objects, 18720 bytes
---- pcalc_prop_deferral 86 objects, 17888 bytes ---- pcalc_prop_deferral 86 objects, 17888 bytes
@ -177,33 +177,33 @@ Total memory consumption was 123156K = 120 MB
---- submodule_identity 34 objects, 1088 bytes ---- submodule_identity 34 objects, 1088 bytes
---- runtime_kind_structure 13 objects, 1040 bytes ---- runtime_kind_structure 13 objects, 1040 bytes
---- quantifier 16 objects, 1024 bytes ---- quantifier 16 objects, 1024 bytes
---- pipeline_stage 20 objects, 960 bytes
---- named_rulebook_outcome 15 objects, 960 bytes ---- named_rulebook_outcome 15 objects, 960 bytes
---- pipeline_stage 20 objects, 960 bytes
---- JSON_pair_requirement 29 objects, 928 bytes ---- JSON_pair_requirement 29 objects, 928 bytes
---- control_structure_phrase 12 objects, 864 bytes
---- web_md 6 objects, 864 bytes ---- web_md 6 objects, 864 bytes
---- control_structure_phrase 12 objects, 864 bytes
---- cached_understanding 21 objects, 840 bytes ---- cached_understanding 21 objects, 840 bytes
---- phrase_option_array 1 x 100 objects, 824 bytes ---- phrase_option_array 1 x 100 objects, 824 bytes
---- copy_error 7 objects, 784 bytes
---- kit_configuration 19 objects, 760 bytes ---- kit_configuration 19 objects, 760 bytes
---- internal_test 15 objects, 720 bytes ---- internal_test 15 objects, 720 bytes
---- inform_kit 6 objects, 672 bytes ---- inform_kit 6 objects, 672 bytes
---- copy_error 6 objects, 672 bytes
---- relation_guard 5 objects, 640 bytes ---- relation_guard 5 objects, 640 bytes
---- implication 13 objects, 624 bytes ---- implication 13 objects, 624 bytes
---- code_generation 1 object, 576 bytes ---- code_generation 1 object, 576 bytes
---- generated_segment 14 objects, 560 bytes
---- inter_annotation_form 14 objects, 560 bytes ---- inter_annotation_form 14 objects, 560 bytes
---- inter_warehouse_room 10 objects, 560 bytes ---- inter_warehouse_room 10 objects, 560 bytes
---- generated_segment 14 objects, 560 bytes
---- rulebook_outcome 17 objects, 544 bytes ---- rulebook_outcome 17 objects, 544 bytes
---- small_word_set 11 objects, 528 bytes
---- chapter_md 6 objects, 528 bytes ---- chapter_md 6 objects, 528 bytes
---- small_word_set 11 objects, 528 bytes
---- module 6 objects, 480 bytes ---- module 6 objects, 480 bytes
---- equation 4 objects, 480 bytes ---- equation 4 objects, 480 bytes
---- i6_memory_setting 14 objects, 448 bytes ---- i6_memory_setting 14 objects, 448 bytes
---- bp_family 14 objects, 448 bytes ---- bp_family 14 objects, 448 bytes
---- inference_family 11 objects, 440 bytes ---- inference_family 11 objects, 440 bytes
---- article_usage 8 objects, 384 bytes
---- inbuild_genre 8 objects, 384 bytes ---- inbuild_genre 8 objects, 384 bytes
---- article_usage 8 objects, 384 bytes
---- source_file 5 objects, 360 bytes ---- source_file 5 objects, 360 bytes
---- tree_inventory 1 object, 320 bytes ---- tree_inventory 1 object, 320 bytes
---- grammatical_category 8 objects, 320 bytes ---- grammatical_category 8 objects, 320 bytes
@ -251,16 +251,16 @@ Total memory consumption was 123156K = 120 MB
100.0% was used for memory not allocated for objects: 100.0% was used for memory not allocated for objects:
57.5% text stream storage 72566844 bytes in 487989 claims 57.5% text stream storage 72572840 bytes in 488028 claims
4.2% dictionary storage 5319680 bytes in 7630 claims 4.2% dictionary storage 5319680 bytes in 7630 claims
---- sorting 2720 bytes in 387 claims ---- sorting 2752 bytes in 394 claims
5.7% source text 7200000 bytes in 3 claims 5.7% source text 7200000 bytes in 3 claims
8.5% source text details 10800000 bytes in 2 claims 8.5% source text details 10800000 bytes in 2 claims
0.2% documentation fragments 262144 bytes in 1 claim 0.2% documentation fragments 262144 bytes in 1 claim
---- linguistic stock array 81920 bytes in 2 claims ---- linguistic stock array 81920 bytes in 2 claims
---- small word set array 105600 bytes in 22 claims ---- small word set array 105600 bytes in 22 claims
3.6% inter symbols storage 4558480 bytes in 27989 claims 3.6% inter symbols storage 4558480 bytes in 27989 claims
13.3% inter bytecode storage 16773540 bytes in 14 claims 13.2% inter bytecode storage 16773540 bytes in 14 claims
4.9% inter links storage 6222976 bytes in 11 claims 4.9% inter links storage 6222976 bytes in 11 claims
0.1% inter tree location list storage 191232 bytes in 32 claims 0.1% inter tree location list storage 191232 bytes in 32 claims
1.3% instance-of-kind counting 1705636 bytes in 1 claim 1.3% instance-of-kind counting 1705636 bytes in 1 claim
@ -269,5 +269,5 @@ Total memory consumption was 123156K = 120 MB
---- code generation workspace for objects 3480 bytes in 19 claims ---- code generation workspace for objects 3480 bytes in 19 claims
0.2% emitter array storage 280544 bytes in 2001 claims 0.2% emitter array storage 280544 bytes in 2001 claims
-150.0% was overhead - -189255920 bytes = -184820K = -180 MB -150.0% was overhead - -189284320 bytes = -184847K = -180 MB

View file

@ -1,32 +1,29 @@
100.0% in inform7 run 100.0% in inform7 run
70.1% in compilation to Inter 67.3% in compilation to Inter
49.6% in //Sequence::undertake_queued_tasks// 45.2% in //Sequence::undertake_queued_tasks//
4.9% in //MajorNodes::pre_pass// 4.7% in //MajorNodes::pre_pass//
3.5% in //MajorNodes::pass_1// 3.6% in //MajorNodes::pass_1//
1.7% in //ImperativeDefinitions::assess_all// 1.8% in //ImperativeDefinitions::assess_all//
1.5% in //RTKindConstructors::compile// 1.8% in //RTKindConstructors::compile//
1.3% in //RTPhrasebook::compile_entries// 1.4% in //RTPhrasebook::compile_entries//
0.9% in //Sequence::lint_inter// 1.0% in //Sequence::lint_inter//
0.5% in //ImperativeDefinitions::compile_first_block// 0.7% in //ImperativeDefinitions::compile_first_block//
0.5% in //Sequence::undertake_queued_tasks// 0.3% in //CompletionModule::compile//
0.5% in //World::stage_V//
0.3% in //MajorNodes::pass_2// 0.3% in //MajorNodes::pass_2//
0.3% in //Sequence::undertake_queued_tasks// 0.3% in //Sequence::undertake_queued_tasks//
0.1% in //CompletionModule::compile// 0.3% in //Sequence::undertake_queued_tasks//
0.1% in //InferenceSubjects::emit_all// 0.3% in //World::stage_V//
0.1% in //RTKindConstructors::compile_permissions// 5.0% not specifically accounted for
0.1% in //Task::make_built_in_kind_constructors// 28.9% in running Inter pipeline
3.0% not specifically accounted for 9.0% in step 5/15: load-binary-kits
26.2% in running Inter pipeline 8.3% in step 14/15: generate inform6 -> auto.inf
10.0% in step 14/15: generate inform6 -> auto.inf 5.7% in step 6/15: make-synoptic-module
5.9% in step 5/15: load-binary-kits 1.8% in step 9/15: make-identifiers-unique
5.5% in step 6/15: make-synoptic-module 0.3% in step 11/15: eliminate-redundant-labels
1.7% in step 9/15: make-identifiers-unique
0.3% in step 12/15: eliminate-redundant-operations 0.3% in step 12/15: eliminate-redundant-operations
0.3% in step 4/15: compile-splats 0.3% in step 4/15: compile-splats
0.3% in step 7/15: shorten-wiring 0.3% in step 7/15: shorten-wiring
0.3% in step 8/15: detect-indirect-calls 0.3% in step 8/15: detect-indirect-calls
0.1% in step 11/15: eliminate-redundant-labels 2.1% not specifically accounted for
1.2% not specifically accounted for 3.2% in supervisor
2.9% in supervisor 0.4% not specifically accounted for
0.6% not specifically accounted for

View file

@ -2,7 +2,7 @@
"is": { "is": {
"type": "kit", "type": "kit",
"title": "BasicInformExtrasKit", "title": "BasicInformExtrasKit",
"version": "10.2.0-beta+6W49" "version": "10.2.0-beta+6W51"
}, },
"kit-details": { "kit-details": {
"has-priority": 1 "has-priority": 1

View file

@ -2,7 +2,7 @@
"is": { "is": {
"type": "kit", "type": "kit",
"title": "BasicInformKit", "title": "BasicInformKit",
"version": "10.2.0-beta+6W49" "version": "10.2.0-beta+6W51"
}, },
"needs": [ { "needs": [ {
"unless": { "unless": {

View file

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

View file

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

View file

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

View file

@ -62,6 +62,13 @@ void SourceProblems::issue_problems_arising(inbuild_copy *C) {
"which I don't recognise (which is not fine). Specifically, %2."); "which I don't recognise (which is not fine). Specifically, %2.");
Problems::issue_problem_end(); Problems::issue_problem_end();
break; break;
case PROJECT_MALFORMED_CE:
Problems::quote_stream(1, CE->details);
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(Untestable));
Problems::issue_problem_segment(
"This project seems to be malformed. Specifically, %1.");
Problems::issue_problem_end();
break;
case METADATA_MALFORMED_CE: case METADATA_MALFORMED_CE:
if (CE->copy->found_by) { if (CE->copy->found_by) {
Problems::quote_work(1, CE->copy->found_by->work); Problems::quote_work(1, CE->copy->found_by->work);