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

Made use of new web_md API in foundation

This commit is contained in:
Graham Nelson 2020-04-02 13:31:21 +01:00
parent a1e28495b3
commit 0eb9935979
5 changed files with 116 additions and 250 deletions

View file

@ -144,10 +144,10 @@ stages — before and after — they are accumulated.
<span class="plain">#</span><span class="identifier">endif</span> <span class="plain">#</span><span class="identifier">endif</span>
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">TEMPLATE_READING</span><span class="plain">, </span><span class="string">"Intervention at stage %d Segment %S Part %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">stage</span><span class="plain">, </span><span class="identifier">segment</span><span class="plain">, </span><span class="identifier">part</span><span class="plain">);</span> <span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">TEMPLATE_READING</span><span class="plain">, </span><span class="string">"Intervention at stage %d Segment %S Part %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">stage</span><span class="plain">, </span><span class="identifier">segment</span><span class="plain">, </span><span class="identifier">part</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i6ti</span><span class="plain">-</span><span class="element">&gt;I6T_matter</span><span class="plain">) {</span> <span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i6ti</span><span class="plain">-</span><span class="element">&gt;I6T_matter</span><span class="plain">) {</span>
<span class="functiontext">TemplateReader::interpret</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">i6ti</span><span class="plain">-</span><span class="element">&gt;I6T_matter</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, -1, </span><span class="identifier">kit</span><span class="plain">);</span> <span class="functiontext">TemplateReader::interpret</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">i6ti</span><span class="plain">-</span><span class="element">&gt;I6T_matter</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, -1, </span><span class="identifier">kit</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="plain">}</span> <span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">i6ti</span><span class="plain">-</span><span class="element">&gt;alternative_segment</span><span class="plain">) &gt; 0)</span> <span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">i6ti</span><span class="plain">-</span><span class="element">&gt;alternative_segment</span><span class="plain">) &gt; 0)</span>
<span class="functiontext">TemplateReader::interpret</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">i6ti</span><span class="plain">-</span><span class="element">&gt;alternative_segment</span><span class="plain">, -1, </span><span class="identifier">kit</span><span class="plain">);</span> <span class="functiontext">TemplateReader::interpret</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">i6ti</span><span class="plain">-</span><span class="element">&gt;alternative_segment</span><span class="plain">, -1, </span><span class="identifier">kit</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">stage</span><span class="plain"> == 0) </span><span class="identifier">rv</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span> <span class="reserved">if</span><span class="plain"> (</span><span class="identifier">stage</span><span class="plain"> == 0) </span><span class="identifier">rv</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span> <span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain">;</span> <span class="reserved">return</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain">;</span>
@ -313,7 +313,7 @@ and therefore no interventions will have happened.)
<pre class="display"> <pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">TemplateReader::extract</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">template_file</span><span class="plain">, </span><span class="reserved">I6T_kit</span><span class="plain"> *</span><span class="identifier">kit</span><span class="plain">) {</span> <span class="reserved">void</span><span class="plain"> </span><span class="functiontext">TemplateReader::extract</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">template_file</span><span class="plain">, </span><span class="reserved">I6T_kit</span><span class="plain"> *</span><span class="identifier">kit</span><span class="plain">) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">SP</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span> <span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">SP</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="functiontext">TemplateReader::interpret</span><span class="plain">(</span><span class="identifier">SP</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">template_file</span><span class="plain">, -1, </span><span class="identifier">kit</span><span class="plain">);</span> <span class="functiontext">TemplateReader::interpret</span><span class="plain">(</span><span class="identifier">SP</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">template_file</span><span class="plain">, -1, </span><span class="identifier">kit</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="plain">(*(</span><span class="identifier">kit</span><span class="plain">-</span><span class="element">&gt;raw_callback</span><span class="plain">))(</span><span class="identifier">SP</span><span class="plain">, </span><span class="identifier">kit</span><span class="plain">);</span> <span class="plain">(*(</span><span class="identifier">kit</span><span class="plain">-</span><span class="element">&gt;raw_callback</span><span class="plain">))(</span><span class="identifier">SP</span><span class="plain">, </span><span class="identifier">kit</span><span class="plain">);</span>
<span class="plain">}</span> <span class="plain">}</span>
@ -323,27 +323,23 @@ and therefore no interventions will have happened.)
<span class="plain">} </span><span class="reserved">contents_section_state</span><span class="plain">;</span> <span class="plain">} </span><span class="reserved">contents_section_state</span><span class="plain">;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">TemplateReader::interpret</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">sf</span><span class="plain">,</span> <span class="reserved">void</span><span class="plain"> </span><span class="functiontext">TemplateReader::interpret</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">sf</span><span class="plain">,</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">segment_name</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">N_escape</span><span class="plain">, </span><span class="reserved">I6T_kit</span><span class="plain"> *</span><span class="identifier">kit</span><span class="plain">) {</span> <span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">segment_name</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">N_escape</span><span class="plain">, </span><span class="reserved">I6T_kit</span><span class="plain"> *</span><span class="identifier">kit</span><span class="plain">, </span><span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">Input_Filename</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">segment_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"all"</span><span class="plain">)) {</span> <span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">segment_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"all"</span><span class="plain">)) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">area</span><span class="plain">=0; </span><span class="identifier">area</span><span class="plain">&lt;</span><span class="identifier">kit</span><span class="plain">-</span><span class="element">&gt;no_i6t_file_areas</span><span class="plain">; </span><span class="identifier">area</span><span class="plain">++) {</span> <span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">area</span><span class="plain">=0; </span><span class="identifier">area</span><span class="plain">&lt;</span><span class="identifier">kit</span><span class="plain">-</span><span class="element">&gt;no_i6t_file_areas</span><span class="plain">; </span><span class="identifier">area</span><span class="plain">++) {</span>
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">Pathnames::up</span><span class="plain">(</span><span class="identifier">kit</span><span class="plain">-</span><span class="element">&gt;i6t_files</span><span class="plain">[</span><span class="identifier">area</span><span class="plain">]);</span> <span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">Pathnames::up</span><span class="plain">(</span><span class="identifier">kit</span><span class="plain">-</span><span class="element">&gt;i6t_files</span><span class="plain">[</span><span class="identifier">area</span><span class="plain">]);</span>
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Contents.w"</span><span class="plain">);</span> <span class="identifier">web_md</span><span class="plain"> *</span><span class="identifier">Wm</span><span class="plain"> = </span><span class="identifier">WebMetadata::get</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">V2_SYNTAX</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">TextFiles::exists</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">)) {</span> <span class="identifier">chapter_md</span><span class="plain"> *</span><span class="identifier">Cm</span><span class="plain">;</span>
<span class="reserved">contents_section_state</span><span class="plain"> </span><span class="identifier">CSS</span><span class="plain">;</span> <span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">Cm</span><span class="plain">, </span><span class="identifier">chapter_md</span><span class="plain">, </span><span class="identifier">Wm</span><span class="plain">-&gt;</span><span class="identifier">chapters_md</span><span class="plain">) {</span>
<span class="identifier">CSS</span><span class="element">.active</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span> <span class="identifier">section_md</span><span class="plain"> *</span><span class="identifier">Sm</span><span class="plain">;</span>
<span class="identifier">CSS</span><span class="element">.sects</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain">);</span> <span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">Sm</span><span class="plain">, </span><span class="identifier">section_md</span><span class="plain">, </span><span class="identifier">Cm</span><span class="plain">-&gt;</span><span class="identifier">sections_md</span><span class="plain">) {</span>
<span class="identifier">TextFiles::read</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">,</span> <span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">SF</span><span class="plain"> = </span><span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="identifier">source_file_for_section</span><span class="plain">;</span>
<span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="functiontext">TemplateReader::read_contents</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) &amp;</span><span class="identifier">CSS</span><span class="plain">);</span> <span class="functiontext">TemplateReader::interpret</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">sf</span><span class="plain">, </span><span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="identifier">sect_title</span><span class="plain">, </span><span class="identifier">N_escape</span><span class="plain">, </span><span class="identifier">kit</span><span class="plain">, </span><span class="identifier">SF</span><span class="plain">);</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">segment</span><span class="plain">;</span> <span class="plain">}</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">segment</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain">, </span><span class="identifier">CSS</span><span class="element">.sects</span><span class="plain">)</span>
<span class="functiontext">TemplateReader::interpret</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">sf</span><span class="plain">, </span><span class="identifier">segment</span><span class="plain">, </span><span class="identifier">N_escape</span><span class="plain">, </span><span class="identifier">kit</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span> <span class="plain">}</span>
<span class="plain">}</span> <span class="plain">}</span>
<span class="functiontext">TemplateReader::error</span><span class="plain">(</span><span class="string">"unable to find a contents section to read 'all'"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Contents.w"</span><span class="plain">);</span> <span class="functiontext">TemplateReader::error</span><span class="plain">(</span><span class="string">"unable to find a contents section to read 'all'"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Contents.w"</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain">;</span> <span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span> <span class="plain">}</span>
<span class="reserved">FILE</span><span class="plain"> *</span><span class="identifier">Input_File</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">heading_name</span><span class="plain">);</span> <span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">heading_name</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">skip_part</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">comment</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span> <span class="reserved">int</span><span class="plain"> </span><span class="identifier">skip_part</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">comment</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">col</span><span class="plain"> = 1, </span><span class="identifier">cr</span><span class="plain">, </span><span class="identifier">sfp</span><span class="plain"> = 0;</span> <span class="reserved">int</span><span class="plain"> </span><span class="identifier">col</span><span class="plain"> = 1, </span><span class="identifier">cr</span><span class="plain">, </span><span class="identifier">sfp</span><span class="plain"> = 0;</span>
@ -354,7 +350,8 @@ and therefore no interventions will have happened.)
<span class="plain">(</span><span class="functiontext">TemplateReader::I6T_file_intervene</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">INSTEAD_LINK_STAGE</span><span class="plain">, </span><span class="identifier">segment_name</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">kit</span><span class="plain">)))</span> <span class="plain">(</span><span class="functiontext">TemplateReader::I6T_file_intervene</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">INSTEAD_LINK_STAGE</span><span class="plain">, </span><span class="identifier">segment_name</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">kit</span><span class="plain">)))</span>
<span class="reserved">goto</span><span class="plain"> </span><span class="identifier">OmitFile</span><span class="plain">;</span> <span class="reserved">goto</span><span class="plain"> </span><span class="identifier">OmitFile</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">segment_name</span><span class="plain">) &gt; 0) {</span> <span class="reserved">FILE</span><span class="plain"> *</span><span class="identifier">Input_File</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">segment_name</span><span class="plain">) &gt; 0) || (</span><span class="identifier">Input_Filename</span><span class="plain">)) {</span>
&lt;<span class="cwebmacro">Open the I6 template file</span> <span class="cwebmacronumber">10.1</span>&gt;<span class="plain">;</span> &lt;<span class="cwebmacro">Open the I6 template file</span> <span class="cwebmacronumber">10.1</span>&gt;<span class="plain">;</span>
<span class="identifier">comment</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span> <span class="identifier">comment</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">comment</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span> <span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">comment</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
@ -392,7 +389,8 @@ part of the I6T kit.
<pre class="displaydefn"> <pre class="displaydefn">
<span class="identifier">Input_File</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span> <span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Input_Filename</span><span class="plain">)</span>
<span class="identifier">Input_File</span><span class="plain"> = </span><span class="identifier">Filenames::fopen</span><span class="plain">(</span><span class="identifier">Input_Filename</span><span class="plain">, </span><span class="string">"r"</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">area</span><span class="plain">=0; </span><span class="identifier">area</span><span class="plain">&lt;</span><span class="identifier">kit</span><span class="plain">-</span><span class="element">&gt;no_i6t_file_areas</span><span class="plain">; </span><span class="identifier">area</span><span class="plain">++)</span> <span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">area</span><span class="plain">=0; </span><span class="identifier">area</span><span class="plain">&lt;</span><span class="identifier">kit</span><span class="plain">-</span><span class="element">&gt;no_i6t_file_areas</span><span class="plain">; </span><span class="identifier">area</span><span class="plain">++)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Input_File</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span> <span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Input_File</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="identifier">Input_File</span><span class="plain"> = </span><span class="identifier">Filenames::fopen</span><span class="plain">(</span> <span class="identifier">Input_File</span><span class="plain"> = </span><span class="identifier">Filenames::fopen</span><span class="plain">(</span>
@ -717,7 +715,7 @@ safely between <code class="display"><span class="extract">{-open-index}</span><
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"segment"</span><span class="plain">)) {</span> <span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"segment"</span><span class="plain">)) {</span>
<span class="plain">(*(</span><span class="identifier">kit</span><span class="plain">-</span><span class="element">&gt;raw_callback</span><span class="plain">))(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">kit</span><span class="plain">);</span> <span class="plain">(*(</span><span class="identifier">kit</span><span class="plain">-</span><span class="element">&gt;raw_callback</span><span class="plain">))(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">kit</span><span class="plain">);</span>
<span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span> <span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="functiontext">TemplateReader::interpret</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">argument</span><span class="plain">, -1, </span><span class="identifier">kit</span><span class="plain">);</span> <span class="functiontext">TemplateReader::interpret</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">argument</span><span class="plain">, -1, </span><span class="identifier">kit</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="plain">(*(</span><span class="identifier">kit</span><span class="plain">-</span><span class="element">&gt;raw_callback</span><span class="plain">))(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">kit</span><span class="plain">);</span> <span class="plain">(*(</span><span class="identifier">kit</span><span class="plain">-</span><span class="element">&gt;raw_callback</span><span class="plain">))(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">kit</span><span class="plain">);</span>
<span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span> <span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="reserved">continue</span><span class="plain">;</span> <span class="reserved">continue</span><span class="plain">;</span>
@ -747,7 +745,7 @@ safely between <code class="display"><span class="extract">{-open-index}</span><
<p class="inwebparagraph"></p> <p class="inwebparagraph"></p>
<p class="endnote">The function TemplateReader::read_contents is used in <a href="#SP10">&#167;10</a>.</p> <p class="endnote">The function TemplateReader::read_contents appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP12"></a><b>&#167;12. Template errors. </b>Errors here used to be basically failed assertions, but inevitably people <p class="inwebparagraph"><a id="SP12"></a><b>&#167;12. Template errors. </b>Errors here used to be basically failed assertions, but inevitably people
reported that as a bug (0001596). It was never intended that I6T coding reported that as a bug (0001596). It was never intended that I6T coding

View file

@ -35,7 +35,7 @@
<!--Weave of '2/pc' generated by 7--> <!--Weave of '2/pc' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../other.html">Other Tools</a></li><li><a href="index.html">inpolicy</a></li><li><a href="index.html#2">Chapter 2: Policies</a></li><li><b>Problem Coverage</b></li></ul><p class="purpose">To see which problem messages have test cases and which are linked to the documentation.</p> <ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../other.html">Other Tools</a></li><li><a href="index.html">inpolicy</a></li><li><a href="index.html#2">Chapter 2: Policies</a></li><li><b>Problem Coverage</b></li></ul><p class="purpose">To see which problem messages have test cases and which are linked to the documentation.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Observation</a></li><li><a href="#SP3">&#167;3. Problems which have test cases</a></li><li><a href="#SP4">&#167;4. Problems mentioned in documentation</a></li><li><a href="#SP5">&#167;5. Problems generated in the I7 source</a></li><li><a href="#SP8">&#167;8. Checking</a></li></ul><hr class="tocbar"> <ul class="toc"><li><a href="#SP1">&#167;1. Observation</a></li><li><a href="#SP3">&#167;3. Problems which have test cases</a></li><li><a href="#SP4">&#167;4. Problems mentioned in documentation</a></li><li><a href="#SP5">&#167;5. Problems generated in the I7 source</a></li><li><a href="#SP7">&#167;7. Checking</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Observation. </b>Problem messages are identified by their code-names, e.g., <code class="display"><span class="extract">PM_MisplacedFrom</span></code>; <p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Observation. </b>Problem messages are identified by their code-names, e.g., <code class="display"><span class="extract">PM_MisplacedFrom</span></code>;
those names should be unique, but any number of problems can instead be those names should be unique, but any number of problems can instead be
@ -99,7 +99,7 @@ and augment its bitmap of known contexts:
<p class="inwebparagraph"></p> <p class="inwebparagraph"></p>
<p class="endnote">The function Coverage::observe_problem is used in <a href="#SP3">&#167;3</a>, <a href="#SP4">&#167;4</a>, <a href="#SP7">&#167;7</a>.</p> <p class="endnote">The function Coverage::observe_problem is used in <a href="#SP3">&#167;3</a>, <a href="#SP4">&#167;4</a>, <a href="#SP6">&#167;6</a>.</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. Problems which have test cases. </b>Here we ask Intest to produce a roster of all known test cases, then parse <p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. Problems which have test cases. </b>Here we ask Intest to produce a roster of all known test cases, then parse
this back to look for cases whose names have the <code class="display"><span class="extract">PM_...</span></code> format. Those are this back to look for cases whose names have the <code class="display"><span class="extract">PM_...</span></code> format. Those are
@ -129,7 +129,7 @@ the problem message test cases, so we observe them.
<p class="inwebparagraph"></p> <p class="inwebparagraph"></p>
<p class="endnote">The function Coverage::which_problems_have_test_cases is used in <a href="#SP8_1">&#167;8.1</a>.</p> <p class="endnote">The function Coverage::which_problems_have_test_cases is used in <a href="#SP7_1">&#167;7.1</a>.</p>
<p class="endnote">The function Coverage::test_case_harvester appears nowhere else.</p> <p class="endnote">The function Coverage::test_case_harvester appears nowhere else.</p>
@ -160,88 +160,45 @@ to problem messages:
<p class="inwebparagraph"></p> <p class="inwebparagraph"></p>
<p class="endnote">The function Coverage::which_problems_are_referenced is used in <a href="#SP8_1">&#167;8.1</a>.</p> <p class="endnote">The function Coverage::which_problems_are_referenced is used in <a href="#SP7_1">&#167;7.1</a>.</p>
<p class="endnote">The function Coverage::xref_harvester appears nowhere else.</p> <p class="endnote">The function Coverage::xref_harvester appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. Problems generated in the I7 source. </b>Which is to say, actually existing problem messages. Ideally, this code <p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. Problems generated in the I7 source. </b>Which is to say, actually existing problem messages.
should find the modules included in Inform in some more sophisticated way.
</p> </p>
<pre class="display"> <pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Coverage::which_problems_exist</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span> <span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Coverage::which_problems_exist</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="functiontext">Coverage::which_problems_exist_inner</span><span class="plain">(</span><span class="functiontext">Pathnames::from_text</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"inform7"</span><span class="plain">));</span> <span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">tools</span><span class="plain"> = </span><span class="functiontext">Pathnames::up</span><span class="plain">(</span><span class="identifier">path_to_inpolicy</span><span class="plain">);</span>
<span class="functiontext">Coverage::which_problems_exist_inner</span><span class="plain">(</span><span class="functiontext">Pathnames::from_text</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"inform7/core-module"</span><span class="plain">));</span> <span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">path_to_inweb</span><span class="plain"> = </span><span class="functiontext">Pathnames::subfolder</span><span class="plain">(</span><span class="functiontext">Pathnames::up</span><span class="plain">(</span><span class="identifier">tools</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"inweb"</span><span class="plain">);</span>
<span class="functiontext">Coverage::which_problems_exist_inner</span><span class="plain">(</span><span class="functiontext">Pathnames::from_text</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"inform7/if-module"</span><span class="plain">));</span> <span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">path_to_inform7</span><span class="plain"> = </span><span class="functiontext">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">tools</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"inform7"</span><span class="plain">);</span>
<span class="functiontext">Coverage::which_problems_exist_inner</span><span class="plain">(</span><span class="functiontext">Pathnames::from_text</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"inform7/multimedia-module"</span><span class="plain">));</span> <span class="reserved">web_md</span><span class="plain"> *</span><span class="identifier">Wm</span><span class="plain"> = </span><span class="functiontext">WebMetadata::get</span><span class="plain">(</span><span class="identifier">path_to_inform7</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="constant">V2_SYNTAX</span><span class="plain">,</span>
<span class="functiontext">Coverage::which_problems_exist_inner</span><span class="plain">(</span><span class="functiontext">Pathnames::from_text</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"inter/codegen-module"</span><span class="plain">));</span> <span class="identifier">NULL</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">, </span><span class="identifier">path_to_inweb</span><span class="plain">);</span>
<span class="plain">}</span> <span class="reserved">chapter_md</span><span class="plain"> *</span><span class="identifier">Cm</span><span class="plain">;</span>
</pre> <span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">Cm</span><span class="plain">, </span><span class="reserved">chapter_md</span><span class="plain">, </span><span class="identifier">Wm</span><span class="plain">-</span><span class="element">&gt;chapters_md</span><span class="plain">) {</span>
<span class="reserved">section_md</span><span class="plain"> *</span><span class="identifier">Sm</span><span class="plain">;</span>
<p class="inwebparagraph"></p> <span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">Sm</span><span class="plain">, </span><span class="reserved">section_md</span><span class="plain">, </span><span class="identifier">Cm</span><span class="plain">-</span><span class="element">&gt;sections_md</span><span class="plain">) {</span>
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">SF</span><span class="plain"> = </span><span class="identifier">Sm</span><span class="plain">-</span><span class="element">&gt;source_file_for_section</span><span class="plain">;</span>
<p class="endnote">The function Coverage::which_problems_exist is used in <a href="#SP8_1">&#167;8.1</a>.</p> <span class="functiontext">TextFiles::read</span><span class="plain">(</span><span class="identifier">SF</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="string">"unable to read section page from 'inform7'"</span><span class="plain">,</span>
<span class="constant">TRUE</span><span class="plain">, &amp;</span><span class="functiontext">Coverage::existence_harvester</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) </span><span class="identifier">SF</span><span class="plain">);</span>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. </b>So now we have to read the contents page of a web, to see what section <span class="plain">}</span>
files it contains:
</p>
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">existence_state</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">web_path</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">chapter_path</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">section</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">existence_state</span><span class="plain">;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Coverage::which_problems_exist_inner</span><span class="plain">(</span><span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">D</span><span class="plain">) {</span>
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Contents.w"</span><span class="plain">);</span>
<span class="reserved">existence_state</span><span class="plain"> </span><span class="identifier">es</span><span class="plain">;</span>
<span class="identifier">es</span><span class="element">.web_path</span><span class="plain"> = </span><span class="identifier">D</span><span class="plain">;</span>
<span class="identifier">es</span><span class="element">.chapter_path</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="functiontext">TextFiles::read</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="string">"unable to read contents page of 'inform7' web"</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">,</span>
<span class="plain">&amp;</span><span class="functiontext">Coverage::section_harvester</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, &amp;</span><span class="identifier">es</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Coverage::section_harvester</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">, </span><span class="reserved">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
<span class="reserved">existence_state</span><span class="plain"> *</span><span class="identifier">es</span><span class="plain"> = (</span><span class="reserved">existence_state</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext">Regexp::create_mr</span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(Chapter %d+)%c+"</span><span class="plain">))</span>
<span class="identifier">es</span><span class="plain">-</span><span class="element">&gt;chapter_path</span><span class="plain"> = </span><span class="functiontext">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">es</span><span class="plain">-</span><span class="element">&gt;web_path</span><span class="plain">, </span><span class="identifier">mr</span><span class="element">.exp</span><span class="plain">[0]);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Appendix%c+"</span><span class="plain">)) </span><span class="identifier">es</span><span class="plain">-</span><span class="element">&gt;chapter_path</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Preliminaries%c+"</span><span class="plain">)) </span><span class="identifier">es</span><span class="plain">-</span><span class="element">&gt;chapter_path</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">es</span><span class="plain">-</span><span class="element">&gt;chapter_path</span><span class="plain">) &amp;&amp; (</span><span class="functiontext">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">" (%c+?) *"</span><span class="plain">))) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">);</span>
<span class="functiontext">Str::copy</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">, </span><span class="identifier">mr</span><span class="element">.exp</span><span class="plain">[0]);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">leaf</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c+?) %[%[%c+"</span><span class="plain">)) </span><span class="functiontext">Str::copy</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">, </span><span class="identifier">mr</span><span class="element">.exp</span><span class="plain">[0]);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">, </span><span class="string">".w"</span><span class="plain">);</span>
<span class="identifier">es</span><span class="plain">-</span><span class="element">&gt;section</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">es</span><span class="plain">-</span><span class="element">&gt;chapter_path</span><span class="plain">, </span><span class="identifier">leaf</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">leaf</span><span class="plain">);</span>
<span class="functiontext">TextFiles::read</span><span class="plain">(</span><span class="identifier">es</span><span class="plain">-</span><span class="element">&gt;section</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="string">"unable to read section page from 'inform7' web"</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">,</span>
<span class="plain">&amp;</span><span class="functiontext">Coverage::existence_harvester</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">es</span><span class="plain">);</span>
<span class="plain">}</span> <span class="plain">}</span>
<span class="functiontext">Regexp::dispose_of</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">);</span>
<span class="plain">}</span> <span class="plain">}</span>
</pre> </pre>
<p class="inwebparagraph"></p> <p class="inwebparagraph"></p>
<p class="endnote">The function Coverage::which_problems_exist_inner is used in <a href="#SP5">&#167;5</a>.</p> <p class="endnote">The function Coverage::which_problems_exist is used in <a href="#SP7_1">&#167;7.1</a>.</p>
<p class="endnote">The function Coverage::section_harvester appears nowhere else.</p> <p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. </b>So now we have to read a section, looking for the existence of problem
messages:
<p class="endnote">The structure existence_state is private to this section.</p>
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. </b>So now we're working through individual section files. The exclusion of
the case called <code class="display"><span class="extract">sigil</span></code> throws out a macro definition in the source code,
not a specific problem case.
</p> </p>
<pre class="display"> <pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Coverage::existence_harvester</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">, </span><span class="reserved">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span> <span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Coverage::existence_harvester</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">, </span><span class="reserved">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
<span class="reserved">existence_state</span><span class="plain"> *</span><span class="identifier">es</span><span class="plain"> = (</span><span class="reserved">existence_state</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span> <span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">SF</span><span class="plain"> = (</span><span class="reserved">filename</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext">Regexp::create_mr</span><span class="plain">();</span> <span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext">Regexp::create_mr</span><span class="plain">();</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c*?)_p_%((%c+?)%)(%c*)"</span><span class="plain">)) {</span> <span class="reserved">while</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c*?)_p_%((%c+?)%)(%c*)"</span><span class="plain">)) {</span>
<span class="functiontext">Str::clear</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">);</span> <span class="functiontext">Str::clear</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">);</span>
@ -252,13 +209,13 @@ not a specific problem case.
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">context</span><span class="plain"> = </span><span class="constant">CODE_MENTIONS_PCON</span><span class="plain">;</span> <span class="reserved">int</span><span class="plain"> </span><span class="identifier">context</span><span class="plain"> = </span><span class="constant">CODE_MENTIONS_PCON</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"BelievedImpossible"</span><span class="plain">)) {</span> <span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"BelievedImpossible"</span><span class="plain">)) {</span>
<span class="identifier">context</span><span class="plain"> = </span><span class="constant">IMPOSSIBLE_PCON</span><span class="plain">;</span> <span class="identifier">context</span><span class="plain"> = </span><span class="constant">IMPOSSIBLE_PCON</span><span class="plain">;</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="string">"_%f_line%d"</span><span class="plain">, </span><span class="identifier">es</span><span class="plain">-</span><span class="element">&gt;section</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">-</span><span class="element">&gt;line_count</span><span class="plain">);</span> <span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="string">"_%f_line%d"</span><span class="plain">, </span><span class="identifier">SF</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">-</span><span class="element">&gt;line_count</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Untestable"</span><span class="plain">)) {</span> <span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Untestable"</span><span class="plain">)) {</span>
<span class="identifier">context</span><span class="plain"> = </span><span class="constant">UNTESTABLE_PCON</span><span class="plain">;</span> <span class="identifier">context</span><span class="plain"> = </span><span class="constant">UNTESTABLE_PCON</span><span class="plain">;</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="string">"_%f_line%d"</span><span class="plain">, </span><span class="identifier">es</span><span class="plain">-</span><span class="element">&gt;section</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">-</span><span class="element">&gt;line_count</span><span class="plain">);</span> <span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="string">"_%f_line%d"</span><span class="plain">, </span><span class="identifier">SF</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">-</span><span class="element">&gt;line_count</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"..."</span><span class="plain">)) {</span> <span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"..."</span><span class="plain">)) {</span>
<span class="identifier">context</span><span class="plain"> = </span><span class="constant">NAMELESS_PCON</span><span class="plain">;</span> <span class="identifier">context</span><span class="plain"> = </span><span class="constant">NAMELESS_PCON</span><span class="plain">;</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="string">"_%f_line%d"</span><span class="plain">, </span><span class="identifier">es</span><span class="plain">-</span><span class="element">&gt;section</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">-</span><span class="element">&gt;line_count</span><span class="plain">);</span> <span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="string">"_%f_line%d"</span><span class="plain">, </span><span class="identifier">SF</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">-</span><span class="element">&gt;line_count</span><span class="plain">);</span>
<span class="plain">}</span> <span class="plain">}</span>
<span class="functiontext">Coverage::observe_problem</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">context</span><span class="plain">);</span> <span class="functiontext">Coverage::observe_problem</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">context</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span> <span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
@ -269,9 +226,9 @@ not a specific problem case.
<p class="inwebparagraph"></p> <p class="inwebparagraph"></p>
<p class="endnote">The function Coverage::existence_harvester is used in <a href="#SP6">&#167;6</a>.</p> <p class="endnote">The function Coverage::existence_harvester is used in <a href="#SP5">&#167;5</a>.</p>
<p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. Checking. </b>So the actual policy-enforcement routine is here: <p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. Checking. </b>So the actual policy-enforcement routine is here:
</p> </p>
@ -279,12 +236,12 @@ not a specific problem case.
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">observations_made</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span> <span class="reserved">int</span><span class="plain"> </span><span class="identifier">observations_made</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Coverage::check</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">) {</span> <span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Coverage::check</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">observations_made</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) {</span> <span class="reserved">if</span><span class="plain"> (</span><span class="identifier">observations_made</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Perform the observations</span> <span class="cwebmacronumber">8.1</span>&gt;<span class="plain">;</span> &lt;<span class="cwebmacro">Perform the observations</span> <span class="cwebmacronumber">7.1</span>&gt;<span class="plain">;</span>
<span class="identifier">observations_made</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span> <span class="identifier">observations_made</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="plain">}</span> <span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">all_is_well</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span> <span class="reserved">int</span><span class="plain"> </span><span class="identifier">all_is_well</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Report and decide how grave the situation is</span> <span class="cwebmacronumber">8.2</span>&gt;<span class="plain">;</span> &lt;<span class="cwebmacro">Report and decide how grave the situation is</span> <span class="cwebmacronumber">7.2</span>&gt;<span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">all_is_well</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"All is well.\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span> <span class="reserved">if</span><span class="plain"> (</span><span class="identifier">all_is_well</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"All is well.\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"This needs attention.\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span> <span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"This needs attention.\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span> <span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
@ -296,8 +253,8 @@ not a specific problem case.
<p class="endnote">The function Coverage::check is used in 1/mn (<a href="1-mn.html#SP2">&#167;2</a>).</p> <p class="endnote">The function Coverage::check is used in 1/mn (<a href="1-mn.html#SP2">&#167;2</a>).</p>
<p class="inwebparagraph"><a id="SP8_1"></a><b>&#167;8.1. </b><code class="display"> <p class="inwebparagraph"><a id="SP7_1"></a><b>&#167;7.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Perform the observations</span> <span class="cwebmacronumber">8.1</span>&gt; = &lt;<span class="cwebmacrodefn">Perform the observations</span> <span class="cwebmacronumber">7.1</span>&gt; =
</code></p> </code></p>
@ -309,14 +266,14 @@ not a specific problem case.
<p class="inwebparagraph"></p> <p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP8">&#167;8</a>.</p> <p class="endnote">This code is used in <a href="#SP7">&#167;7</a>.</p>
<p class="inwebparagraph"><a id="SP8_2"></a><b>&#167;8.2. </b>Okay, so that's all of the scanning done; now to report on it. <p class="inwebparagraph"><a id="SP7_2"></a><b>&#167;7.2. </b>Okay, so that's all of the scanning done; now to report on it.
</p> </p>
<p class="macrodefinition"><code class="display"> <p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Report and decide how grave the situation is</span> <span class="cwebmacronumber">8.2</span>&gt; = &lt;<span class="cwebmacrodefn">Report and decide how grave the situation is</span> <span class="cwebmacronumber">7.2</span>&gt; =
</code></p> </code></p>
@ -372,9 +329,9 @@ not a specific problem case.
<p class="inwebparagraph"></p> <p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP8">&#167;8</a>.</p> <p class="endnote">This code is used in <a href="#SP7">&#167;7</a>.</p>
<p class="inwebparagraph"><a id="SP9"></a><b>&#167;9. </b></p> <p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. </b></p>
<pre class="display"> <pre class="display">
@ -403,9 +360,9 @@ not a specific problem case.
<p class="inwebparagraph"></p> <p class="inwebparagraph"></p>
<p class="endnote">The function Coverage::cite is used in <a href="#SP8_2">&#167;8.2</a>.</p> <p class="endnote">The function Coverage::cite is used in <a href="#SP7_2">&#167;7.2</a>.</p>
<p class="endnote">The function Coverage::list is used in <a href="#SP8_2">&#167;8.2</a>.</p> <p class="endnote">The function Coverage::list is used in <a href="#SP7_2">&#167;7.2</a>.</p>
<hr class="tocbar"> <hr class="tocbar">
<!--End of weave--> <!--End of weave-->

View file

@ -99,64 +99,32 @@ void Coverage::xref_harvester(text_stream *text, text_file_position *tfp, void *
} }
@h Problems generated in the I7 source. @h Problems generated in the I7 source.
Which is to say, actually existing problem messages. Ideally, this code Which is to say, actually existing problem messages.
should find the modules included in Inform in some more sophisticated way.
= =
void Coverage::which_problems_exist(void) { void Coverage::which_problems_exist(void) {
Coverage::which_problems_exist_inner(Pathnames::from_text(I"inform7")); pathname *tools = Pathnames::up(path_to_inpolicy);
Coverage::which_problems_exist_inner(Pathnames::from_text(I"inform7/core-module")); pathname *path_to_inweb = Pathnames::subfolder(Pathnames::up(tools), I"inweb");
Coverage::which_problems_exist_inner(Pathnames::from_text(I"inform7/if-module")); pathname *path_to_inform7 = Pathnames::subfolder(tools, I"inform7");
Coverage::which_problems_exist_inner(Pathnames::from_text(I"inform7/multimedia-module")); web_md *Wm = WebMetadata::get(path_to_inform7, NULL, V2_SYNTAX,
Coverage::which_problems_exist_inner(Pathnames::from_text(I"inter/codegen-module")); NULL, FALSE, TRUE, path_to_inweb);
} chapter_md *Cm;
LOOP_OVER_LINKED_LIST(Cm, chapter_md, Wm->chapters_md) {
@ So now we have to read the contents page of a web, to see what section section_md *Sm;
files it contains: LOOP_OVER_LINKED_LIST(Sm, section_md, Cm->sections_md) {
filename *SF = Sm->source_file_for_section;
= TextFiles::read(SF, FALSE, "unable to read section page from 'inform7'",
typedef struct existence_state { TRUE, &Coverage::existence_harvester, NULL, (void *) SF);
struct pathname *web_path; }
struct pathname *chapter_path;
struct filename *section;
} existence_state;
void Coverage::which_problems_exist_inner(pathname *D) {
filename *C = Filenames::in_folder(D, I"Contents.w");
existence_state es;
es.web_path = D;
es.chapter_path = NULL;
TextFiles::read(C, FALSE, "unable to read contents page of 'inform7' web", TRUE,
&Coverage::section_harvester, NULL, &es);
}
void Coverage::section_harvester(text_stream *text, text_file_position *tfp, void *state) {
existence_state *es = (existence_state *) state;
match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, text, L"(Chapter %d+)%c+"))
es->chapter_path = Pathnames::subfolder(es->web_path, mr.exp[0]);
if (Regexp::match(&mr, text, L"Appendix%c+")) es->chapter_path = NULL;
if (Regexp::match(&mr, text, L"Preliminaries%c+")) es->chapter_path = NULL;
if ((es->chapter_path) && (Regexp::match(&mr, text, L" (%c+?) *"))) {
TEMPORARY_TEXT(leaf);
Str::copy(leaf, mr.exp[0]);
if (Regexp::match(&mr, leaf, L"(%c+?) %[%[%c+")) Str::copy(leaf, mr.exp[0]);
WRITE_TO(leaf, ".w");
es->section = Filenames::in_folder(es->chapter_path, leaf);
DISCARD_TEXT(leaf);
TextFiles::read(es->section, FALSE, "unable to read section page from 'inform7' web", TRUE,
&Coverage::existence_harvester, NULL, es);
} }
Regexp::dispose_of(&mr);
} }
@ So now we're working through individual section files. The exclusion of @ So now we have to read a section, looking for the existence of problem
the case called |sigil| throws out a macro definition in the source code, messages:
not a specific problem case.
= =
void Coverage::existence_harvester(text_stream *text, text_file_position *tfp, void *state) { void Coverage::existence_harvester(text_stream *text, text_file_position *tfp, void *state) {
existence_state *es = (existence_state *) state; filename *SF = (filename *) state;
match_results mr = Regexp::create_mr(); match_results mr = Regexp::create_mr();
while (Regexp::match(&mr, text, L"(%c*?)_p_%((%c+?)%)(%c*)")) { while (Regexp::match(&mr, text, L"(%c*?)_p_%((%c+?)%)(%c*)")) {
Str::clear(text); Str::clear(text);
@ -167,13 +135,13 @@ void Coverage::existence_harvester(text_stream *text, text_file_position *tfp, v
int context = CODE_MENTIONS_PCON; int context = CODE_MENTIONS_PCON;
if (Str::eq(name, I"BelievedImpossible")) { if (Str::eq(name, I"BelievedImpossible")) {
context = IMPOSSIBLE_PCON; context = IMPOSSIBLE_PCON;
WRITE_TO(name, "_%f_line%d", es->section, tfp->line_count); WRITE_TO(name, "_%f_line%d", SF, tfp->line_count);
} else if (Str::eq(name, I"Untestable")) { } else if (Str::eq(name, I"Untestable")) {
context = UNTESTABLE_PCON; context = UNTESTABLE_PCON;
WRITE_TO(name, "_%f_line%d", es->section, tfp->line_count); WRITE_TO(name, "_%f_line%d", SF, tfp->line_count);
} else if (Str::eq(name, I"...")) { } else if (Str::eq(name, I"...")) {
context = NAMELESS_PCON; context = NAMELESS_PCON;
WRITE_TO(name, "_%f_line%d", es->section, tfp->line_count); WRITE_TO(name, "_%f_line%d", SF, tfp->line_count);
} }
Coverage::observe_problem(name, context); Coverage::observe_problem(name, context);
DISCARD_TEXT(name); DISCARD_TEXT(name);

View file

@ -71,10 +71,10 @@ int TemplateReader::I6T_file_intervene(OUTPUT_STREAM, int stage, text_stream *se
#endif #endif
LOGIF(TEMPLATE_READING, "Intervention at stage %d Segment %S Part %S\n", stage, segment, part); LOGIF(TEMPLATE_READING, "Intervention at stage %d Segment %S Part %S\n", stage, segment, part);
if (i6ti->I6T_matter) { if (i6ti->I6T_matter) {
TemplateReader::interpret(OUT, i6ti->I6T_matter, NULL, -1, kit); TemplateReader::interpret(OUT, i6ti->I6T_matter, NULL, -1, kit, NULL);
} }
if (Str::len(i6ti->alternative_segment) > 0) if (Str::len(i6ti->alternative_segment) > 0)
TemplateReader::interpret(OUT, NULL, i6ti->alternative_segment, -1, kit); TemplateReader::interpret(OUT, NULL, i6ti->alternative_segment, -1, kit, NULL);
if (stage == 0) rv = TRUE; if (stage == 0) rv = TRUE;
} }
return rv; return rv;
@ -200,7 +200,7 @@ and therefore no interventions will have happened.)
= =
void TemplateReader::extract(text_stream *template_file, I6T_kit *kit) { void TemplateReader::extract(text_stream *template_file, I6T_kit *kit) {
text_stream *SP = Str::new(); text_stream *SP = Str::new();
TemplateReader::interpret(SP, NULL, template_file, -1, kit); TemplateReader::interpret(SP, NULL, template_file, -1, kit, NULL);
(*(kit->raw_callback))(SP, kit); (*(kit->raw_callback))(SP, kit);
} }
@ -210,27 +210,23 @@ typedef struct contents_section_state {
} contents_section_state; } contents_section_state;
void TemplateReader::interpret(OUTPUT_STREAM, text_stream *sf, void TemplateReader::interpret(OUTPUT_STREAM, text_stream *sf,
text_stream *segment_name, int N_escape, I6T_kit *kit) { text_stream *segment_name, int N_escape, I6T_kit *kit, filename *Input_Filename) {
if (Str::eq(segment_name, I"all")) { if (Str::eq(segment_name, I"all")) {
for (int area=0; area<kit->no_i6t_file_areas; area++) { for (int area=0; area<kit->no_i6t_file_areas; area++) {
pathname *P = Pathnames::up(kit->i6t_files[area]); pathname *P = Pathnames::up(kit->i6t_files[area]);
filename *F = Filenames::in_folder(P, I"Contents.w"); web_md *Wm = WebMetadata::get(P, NULL, V2_SYNTAX, NULL, FALSE, TRUE, NULL);
if (TextFiles::exists(F)) { chapter_md *Cm;
contents_section_state CSS; LOOP_OVER_LINKED_LIST(Cm, chapter_md, Wm->chapters_md) {
CSS.active = FALSE; section_md *Sm;
CSS.sects = NEW_LINKED_LIST(text_stream); LOOP_OVER_LINKED_LIST(Sm, section_md, Cm->sections_md) {
TextFiles::read(F, FALSE, filename *SF = Sm->source_file_for_section;
NULL, FALSE, TemplateReader::read_contents, NULL, (void *) &CSS); TemplateReader::interpret(OUT, sf, Sm->sect_title, N_escape, kit, SF);
text_stream *segment; }
LOOP_OVER_LINKED_LIST(segment, text_stream, CSS.sects)
TemplateReader::interpret(OUT, sf, segment, N_escape, kit);
return;
} }
} }
TemplateReader::error("unable to find a contents section to read 'all'", I"Contents.w"); TemplateReader::error("unable to find a contents section to read 'all'", I"Contents.w");
return; return;
} }
FILE *Input_File = NULL;
TEMPORARY_TEXT(heading_name); TEMPORARY_TEXT(heading_name);
int skip_part = FALSE, comment = TRUE; int skip_part = FALSE, comment = TRUE;
int col = 1, cr, sfp = 0; int col = 1, cr, sfp = 0;
@ -241,7 +237,8 @@ void TemplateReader::interpret(OUTPUT_STREAM, text_stream *sf,
(TemplateReader::I6T_file_intervene(OUT, INSTEAD_LINK_STAGE, segment_name, NULL, kit))) (TemplateReader::I6T_file_intervene(OUT, INSTEAD_LINK_STAGE, segment_name, NULL, kit)))
goto OmitFile; goto OmitFile;
if (Str::len(segment_name) > 0) { FILE *Input_File = NULL;
if ((Str::len(segment_name) > 0) || (Input_Filename)) {
@<Open the I6 template file@>; @<Open the I6 template file@>;
comment = TRUE; comment = TRUE;
} else comment = FALSE; } else comment = FALSE;
@ -263,7 +260,8 @@ void TemplateReader::interpret(OUTPUT_STREAM, text_stream *sf,
part of the I6T kit. part of the I6T kit.
@<Open the I6 template file@> = @<Open the I6 template file@> =
Input_File = NULL; if (Input_Filename)
Input_File = Filenames::fopen(Input_Filename, "r");
for (int area=0; area<kit->no_i6t_file_areas; area++) for (int area=0; area<kit->no_i6t_file_areas; area++)
if (Input_File == NULL) if (Input_File == NULL)
Input_File = Filenames::fopen( Input_File = Filenames::fopen(
@ -486,7 +484,7 @@ safely between |{-open-index}| and |{-close-index}|.
if (Str::eq_wide_string(command, L"segment")) { if (Str::eq_wide_string(command, L"segment")) {
(*(kit->raw_callback))(OUT, kit); (*(kit->raw_callback))(OUT, kit);
Str::clear(OUT); Str::clear(OUT);
TemplateReader::interpret(OUT, NULL, argument, -1, kit); TemplateReader::interpret(OUT, NULL, argument, -1, kit, NULL);
(*(kit->raw_callback))(OUT, kit); (*(kit->raw_callback))(OUT, kit);
Str::clear(OUT); Str::clear(OUT);
continue; continue;

View file

@ -66,50 +66,18 @@ INBUILDX = inbuild/Tangled/inbuild
# After its declaration, we list all modules needed to compile the tool. # After its declaration, we list all modules needed to compile the tool.
{tool} INBLORB inblorb inblorb {tool} INBLORB inblorb inblorb
{dep} INBLORB on FOUNDATION
{tool} INDOC indoc indoc {tool} INDOC indoc indoc
{dep} INDOC on FOUNDATION
{tool} INFORM7 inform7 inform7 {tool} INFORM7 inform7 inform7
{dep} INFORM7 on FOUNDATION
{dep} INFORM7 on WORDS
{dep} INFORM7 on INFLECTIONS
{dep} INFORM7 on SYNTAX
{dep} INFORM7 on LINGUISTICS
{dep} INFORM7 on KINDS
{dep} INFORM7 on PROBLEMS
{dep} INFORM7 on CORE
{dep} INFORM7 on IF
{dep} INFORM7 on MULTIMEDIA
{dep} INFORM7 on INDEX
{dep} INFORM7 on HTML
{dep} INFORM7 on ARCH
{dep} INFORM7 on INTER
{dep} INFORM7 on BUILDING
{dep} INFORM7 on CODEGEN
{dep} INFORM7 on INBUILD
{tool} INPOLICY inpolicy inpolicy {tool} INPOLICY inpolicy inpolicy
{dep} INPOLICY on FOUNDATION
{tool} INRTPS inrtps inrtps {tool} INRTPS inrtps inrtps
{dep} INRTPS on FOUNDATION
{tool} INBUILDTOOL inbuild inbuild {tool} INBUILDTOOL inbuild inbuild
{dep} INBUILDTOOL on FOUNDATION
{dep} INBUILDTOOL on WORDS
{dep} INBUILDTOOL on SYNTAX
{dep} INBUILDTOOL on HTML
{dep} INBUILDTOOL on ARCH
{dep} INBUILDTOOL on INBUILD
{tool} INTERTOOL inter inter {tool} INTERTOOL inter inter
{dep} INTERTOOL on FOUNDATION
{dep} INTERTOOL on ARCH
{dep} INTERTOOL on INTER
{dep} INTERTOOL on BUILDING
{dep} INTERTOOL on CODEGEN
# Inform 6 is not a web, so we have to give it special treatment: # Inform 6 is not a web, so we have to give it special treatment:
@ -118,41 +86,18 @@ INFORM6X = inform6/Tangled/inform6
# While these are also executables, they only provide unit tests for modules: # While these are also executables, they only provide unit tests for modules:
{tool} INFLECTIONSTEST inflections-test inform7/inflections-test {tool} INFLECTIONSTEST inflections-test inform7/inflections-test
{dep} INFLECTIONSTEST on FOUNDATION
{dep} INFLECTIONSTEST on WORDS
{dep} INFLECTIONSTEST on INFLECTIONS
{tool} LINGUISTICSTEST linguistics-test inform7/linguistics-test {tool} LINGUISTICSTEST linguistics-test inform7/linguistics-test
{dep} LINGUISTICSTEST on FOUNDATION
{dep} LINGUISTICSTEST on WORDS
{dep} LINGUISTICSTEST on INFLECTIONS
{dep} LINGUISTICSTEST on SYNTAX
{dep} LINGUISTICSTEST on LINGUISTICS
{tool} PROBLEMSTEST problems-test inform7/problems-test {tool} PROBLEMSTEST problems-test inform7/problems-test
{dep} PROBLEMSTEST on FOUNDATION
{dep} PROBLEMSTEST on WORDS
{dep} PROBLEMSTEST on SYNTAX
{dep} PROBLEMSTEST on PROBLEMS
{tool} SYNTAXTEST syntax-test inbuild/syntax-test {tool} SYNTAXTEST syntax-test inbuild/syntax-test
{dep} SYNTAXTEST on FOUNDATION
{dep} SYNTAXTEST on WORDS
{dep} SYNTAXTEST on SYNTAX
{tool} WORDSTEST words-test inbuild/words-test {tool} WORDSTEST words-test inbuild/words-test
{dep} WORDSTEST on FOUNDATION
{dep} WORDSTEST on WORDS
{tool} BUILDINGTEST building-test inter/building-test {tool} BUILDINGTEST building-test inter/building-test
{dep} BUILDINGTEST on FOUNDATION
{dep} BUILDINGTEST on BUILDING
{dep} BUILDINGTEST on INTER
{dep} BUILDINGTEST on WORDS
{tool} ARCHTEST arch-test inbuild/arch-test {tool} ARCHTEST arch-test inbuild/arch-test
{dep} ARCHTEST on FOUNDATION
{dep} ARCHTEST on ARCH
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# Targets "all" and "force" # Targets "all" and "force"
@ -181,15 +126,15 @@ inform7/Internal/Languages/English/Syntax.preform: inform7/Tangled/Syntax.prefor
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# Each individual tool has its own makefile, stored inside its individual web. # Each individual tool has its own makefile, stored inside its individual web.
# "make makers" runs through each tool in turn and creates this makefile. # "make makers" runs through each tool in turn and creates this makefile.
# Note the repeatblock feature: the line in the block is repeated once for each # Note the repeat-tools-block feature: the line in the block is repeated once for each
# defined tool. Inside the block, an asterisk expands to the tool's symbol # defined tool. Inside the block, an asterisk expands to the tool's symbol
# name: so for example, for inblorb, *WEB would become INBLORBWEB. # name: so for example, for inblorb, *WEB would become INBLORBWEB.
.PHONY: makers .PHONY: makers
makers: makers:
{repeatblock} {repeat-tools-block}
$(INWEBX) $(*WEB) -makefile $(*MAKER) $(INWEBX) $(*WEB) -makefile $(*MAKER)
{endblock} {end-block}
$(INWEBX) -prototype inform6/makescript.txt -makefile inform6/inform6.mk $(INWEBX) -prototype inform6/makescript.txt -makefile inform6/inform6.mk
$(INWEBX) -prototype retrospective/makescript.txt -makefile retrospective/makefile $(INWEBX) -prototype retrospective/makescript.txt -makefile retrospective/makefile
@ -201,9 +146,9 @@ makers:
.PHONY: gitignores .PHONY: gitignores
gitignores: gitignores:
$(INWEBX) -prototype scripts/gitignorescript.txt -gitignore .gitignore $(INWEBX) -prototype scripts/gitignorescript.txt -gitignore .gitignore
{repeatblock} {repeat-tools-block}
$(INWEBX) $(*WEB) -gitignore $(*WEB)/.gitignore $(INWEBX) $(*WEB) -gitignore $(*WEB)/.gitignore
{endblock} {end-block}
$(INWEBX) -prototype inform6/gitignorescript.txt -gitignore inform6/.gitignore $(INWEBX) -prototype inform6/gitignorescript.txt -gitignore inform6/.gitignore
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
@ -213,9 +158,9 @@ gitignores:
.PHONY: versions .PHONY: versions
versions: versions:
{repeatblock} {repeat-tools-block}
$(*X) -version $(*X) -version
{endblock} {end-block}
$(INFORM6X) -V $(INFORM6X) -V
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
@ -261,13 +206,13 @@ forcekits:
# Note the use of repeat to make a list: $(INBLORBX) $(INDOCX) ..., etc. # Note the use of repeat to make a list: $(INBLORBX) $(INDOCX) ..., etc.
.PHONY: tools .PHONY: tools
tools: {repeatspan}$(*X){endspan} $(INFORM6X) tools: {repeat-tools-span}$(*X){end-span} $(INFORM6X)
{repeatblock} {repeat-tools-block}
$(*X): {dependent-files-for}* $(*X): {dependent-files-for-tool}*
$(MAKE) -f $(*MAKER) $(MAKE) -f $(*MAKER)
{endblock} {end-block}
# As ever, Inform 6 needs special handling: # As ever, Inform 6 needs special handling:
@ -292,10 +237,10 @@ retrospective:
.PHONY: forcetools .PHONY: forcetools
forcetools: forcetools:
{repeatblock} {repeat-tools-block}
$(MAKE) -f $(*MAKER) force $(MAKE) -f $(*MAKER) force
$(MAKE) -f inform6/inform6.mk force $(MAKE) -f inform6/inform6.mk force
{endblock} {end-block}
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# Target "check" # Target "check"
@ -309,9 +254,9 @@ forcetools:
check: check:
$(MAKE) -f inform6/inform6.mk test $(MAKE) -f inform6/inform6.mk test
$(INPOLICYX) -silence -check-problems $(INPOLICYX) -silence -check-problems
{repeatblock} {repeat-tools-block}
$(MAKE) -f $(*MAKER) test $(MAKE) -f $(*MAKER) test
{endblock} {end-block}
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# Target "tangle" # Target "tangle"
@ -324,9 +269,9 @@ tangle:
$(call tangle-webs) $(call tangle-webs)
define tangle-webs define tangle-webs
{repeatblock} {repeat-tools-block}
$(INWEBX) $(*WEB) -tangle $(INWEBX) $(*WEB) -tangle
{endblock} {end-block}
endef endef
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
@ -342,9 +287,9 @@ weave:
$(call weave-webs) $(call weave-webs)
define weave-webs define weave-webs
{repeatblock} {repeat-tools-block}
$(INWEBX) $(*WEB) $(WEAVEOPTS) $(INWEBX) $(*WEB) $(WEAVEOPTS)
{endblock} {end-block}
endef endef
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
@ -468,9 +413,9 @@ clean:
$(call clean-up) $(call clean-up)
define clean-up define clean-up
{repeatblock} {repeat-tools-block}
$(MAKE) -f $(*MAKER) clean $(MAKE) -f $(*MAKER) clean
{endblock} {end-block}
$(MAKE) -f inform6/inform6.mk clean $(MAKE) -f inform6/inform6.mk clean
endef endef
@ -485,9 +430,9 @@ purge:
$(call purge-up) $(call purge-up)
define purge-up define purge-up
{repeatblock} {repeat-tools-block}
$(MAKE) -f $(*MAKER) purge $(MAKE) -f $(*MAKER) purge
{endblock} {end-block}
$(MAKE) -f inform6/inform6.mk purge $(MAKE) -f inform6/inform6.mk purge
endef endef