mirror of
https://github.com/ganelson/inform.git
synced 2024-06-30 22:14:58 +03:00
Made use of new web_md API in foundation
This commit is contained in:
parent
a1e28495b3
commit
0eb9935979
|
@ -144,10 +144,10 @@ stages — before and after — they are accumulated.
|
|||
<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="reserved">if</span><span class="plain"> (</span><span class="identifier">i6ti</span><span class="plain">-</span><span class="element">>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">>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">>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="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">>alternative_segment</span><span class="plain">) > 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">>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">>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="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">
|
||||
<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="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">>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>
|
||||
|
||||
|
@ -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="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">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"><</span><span class="identifier">kit</span><span class="plain">-</span><span class="element">>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">>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="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="reserved">contents_section_state</span><span class="plain"> </span><span class="identifier">CSS</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">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">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">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"> *) &</span><span class="identifier">CSS</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="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="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="identifier">chapter_md</span><span class="plain"> *</span><span class="identifier">Cm</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">-></span><span class="identifier">chapters_md</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">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">-></span><span class="identifier">sections_md</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">-></span><span class="identifier">source_file_for_section</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">-></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="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="reserved">return</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="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>
|
||||
|
@ -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="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">) > 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">) > 0) || (</span><span class="identifier">Input_Filename</span><span class="plain">)) {</span>
|
||||
<<span class="cwebmacro">Open the I6 template file</span> <span class="cwebmacronumber">10.1</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>
|
||||
|
@ -392,7 +389,8 @@ part of the I6T kit.
|
|||
|
||||
|
||||
<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"><</span><span class="identifier">kit</span><span class="plain">-</span><span class="element">>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="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="plain">(*(</span><span class="identifier">kit</span><span class="plain">-</span><span class="element">>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="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">>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="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="endnote">The function TemplateReader::read_contents is used in <a href="#SP10">§10</a>.</p>
|
||||
<p class="endnote">The function TemplateReader::read_contents appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP12"></a><b>§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
|
||||
|
|
|
@ -35,7 +35,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="toc"><li><a href="#SP1">§1. Observation</a></li><li><a href="#SP3">§3. Problems which have test cases</a></li><li><a href="#SP4">§4. Problems mentioned in documentation</a></li><li><a href="#SP5">§5. Problems generated in the I7 source</a></li><li><a href="#SP8">§8. Checking</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="#SP1">§1. Observation</a></li><li><a href="#SP3">§3. Problems which have test cases</a></li><li><a href="#SP4">§4. Problems mentioned in documentation</a></li><li><a href="#SP5">§5. Problems generated in the I7 source</a></li><li><a href="#SP7">§7. Checking</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§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
|
||||
|
@ -99,7 +99,7 @@ and augment its bitmap of known contexts:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Coverage::observe_problem is used in <a href="#SP3">§3</a>, <a href="#SP4">§4</a>, <a href="#SP7">§7</a>.</p>
|
||||
<p class="endnote">The function Coverage::observe_problem is used in <a href="#SP3">§3</a>, <a href="#SP4">§4</a>, <a href="#SP6">§6</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§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
|
||||
|
@ -129,7 +129,7 @@ the problem message test cases, so we observe them.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Coverage::which_problems_have_test_cases is used in <a href="#SP8_1">§8.1</a>.</p>
|
||||
<p class="endnote">The function Coverage::which_problems_have_test_cases is used in <a href="#SP7_1">§7.1</a>.</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="endnote">The function Coverage::which_problems_are_referenced is used in <a href="#SP8_1">§8.1</a>.</p>
|
||||
<p class="endnote">The function Coverage::which_problems_are_referenced is used in <a href="#SP7_1">§7.1</a>.</p>
|
||||
|
||||
<p class="endnote">The function Coverage::xref_harvester appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. Problems generated in the I7 source. </b>Which is to say, actually existing problem messages. Ideally, this code
|
||||
should find the modules included in Inform in some more sophisticated way.
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. Problems generated in the I7 source. </b>Which is to say, actually existing problem messages.
|
||||
</p>
|
||||
|
||||
|
||||
<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="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="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="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="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="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="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Coverage::which_problems_exist is used in <a href="#SP8_1">§8.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b>So now we have to read the contents page of a web, to see what section
|
||||
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">&</span><span class="functiontext">Coverage::section_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="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">(&</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">>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">>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">(&</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">>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">(&</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">>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">>chapter_path</span><span class="plain">) && (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</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">(&</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">>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">>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">>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">&</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="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="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="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="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="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="reserved">chapter_md</span><span class="plain"> *</span><span class="identifier">Cm</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="reserved">chapter_md</span><span class="plain">, </span><span class="identifier">Wm</span><span class="plain">-</span><span class="element">>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>
|
||||
<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">>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">>source_file_for_section</span><span class="plain">;</span>
|
||||
<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">, &</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>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="functiontext">Regexp::dispose_of</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Coverage::which_problems_exist_inner is used in <a href="#SP5">§5</a>.</p>
|
||||
<p class="endnote">The function Coverage::which_problems_exist is used in <a href="#SP7_1">§7.1</a>.</p>
|
||||
|
||||
<p class="endnote">The function Coverage::section_harvester appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The structure existence_state is private to this section.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§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 class="inwebparagraph"><a id="SP6"></a><b>§6. </b>So now we have to read a section, looking for the existence of problem
|
||||
messages:
|
||||
</p>
|
||||
|
||||
|
||||
<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">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">while</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</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>
|
||||
|
@ -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">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">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">>section</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">-</span><span class="element">>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">>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="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">>section</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">-</span><span class="element">>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">>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="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">>section</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">-</span><span class="element">>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">>line_count</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="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="endnote">The function Coverage::existence_harvester is used in <a href="#SP6">§6</a>.</p>
|
||||
<p class="endnote">The function Coverage::existence_harvester is used in <a href="#SP5">§5</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8"></a><b>§8. Checking. </b>So the actual policy-enforcement routine is here:
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. Checking. </b>So the actual policy-enforcement routine is here:
|
||||
</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="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="cwebmacro">Perform the observations</span> <span class="cwebmacronumber">8.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Perform the observations</span> <span class="cwebmacronumber">7.1</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="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="cwebmacro">Report and decide how grave the situation is</span> <span class="cwebmacronumber">8.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Report and decide how grave the situation is</span> <span class="cwebmacronumber">7.2</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="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">§2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8_1"></a><b>§8.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Perform the observations</span> <span class="cwebmacronumber">8.1</span>> =
|
||||
<p class="inwebparagraph"><a id="SP7_1"></a><b>§7.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Perform the observations</span> <span class="cwebmacronumber">7.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -309,14 +266,14 @@ not a specific problem case.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP8">§8</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP7">§7</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8_2"></a><b>§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>§7.2. </b>Okay, so that's all of the scanning done; now to report on it.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Report and decide how grave the situation is</span> <span class="cwebmacronumber">8.2</span>> =
|
||||
<<span class="cwebmacrodefn">Report and decide how grave the situation is</span> <span class="cwebmacronumber">7.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -372,9 +329,9 @@ not a specific problem case.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP8">§8</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP7">§7</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9"></a><b>§9. </b></p>
|
||||
<p class="inwebparagraph"><a id="SP8"></a><b>§8. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
|
@ -403,9 +360,9 @@ not a specific problem case.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Coverage::cite is used in <a href="#SP8_2">§8.2</a>.</p>
|
||||
<p class="endnote">The function Coverage::cite is used in <a href="#SP7_2">§7.2</a>.</p>
|
||||
|
||||
<p class="endnote">The function Coverage::list is used in <a href="#SP8_2">§8.2</a>.</p>
|
||||
<p class="endnote">The function Coverage::list is used in <a href="#SP7_2">§7.2</a>.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
|
|
|
@ -99,64 +99,32 @@ void Coverage::xref_harvester(text_stream *text, text_file_position *tfp, void *
|
|||
}
|
||||
|
||||
@h Problems generated in the I7 source.
|
||||
Which is to say, actually existing problem messages. Ideally, this code
|
||||
should find the modules included in Inform in some more sophisticated way.
|
||||
Which is to say, actually existing problem messages.
|
||||
|
||||
=
|
||||
void Coverage::which_problems_exist(void) {
|
||||
Coverage::which_problems_exist_inner(Pathnames::from_text(I"inform7"));
|
||||
Coverage::which_problems_exist_inner(Pathnames::from_text(I"inform7/core-module"));
|
||||
Coverage::which_problems_exist_inner(Pathnames::from_text(I"inform7/if-module"));
|
||||
Coverage::which_problems_exist_inner(Pathnames::from_text(I"inform7/multimedia-module"));
|
||||
Coverage::which_problems_exist_inner(Pathnames::from_text(I"inter/codegen-module"));
|
||||
}
|
||||
|
||||
@ So now we have to read the contents page of a web, to see what section
|
||||
files it contains:
|
||||
|
||||
=
|
||||
typedef struct existence_state {
|
||||
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);
|
||||
pathname *tools = Pathnames::up(path_to_inpolicy);
|
||||
pathname *path_to_inweb = Pathnames::subfolder(Pathnames::up(tools), I"inweb");
|
||||
pathname *path_to_inform7 = Pathnames::subfolder(tools, I"inform7");
|
||||
web_md *Wm = WebMetadata::get(path_to_inform7, NULL, V2_SYNTAX,
|
||||
NULL, FALSE, TRUE, path_to_inweb);
|
||||
chapter_md *Cm;
|
||||
LOOP_OVER_LINKED_LIST(Cm, chapter_md, Wm->chapters_md) {
|
||||
section_md *Sm;
|
||||
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'",
|
||||
TRUE, &Coverage::existence_harvester, NULL, (void *) SF);
|
||||
}
|
||||
}
|
||||
Regexp::dispose_of(&mr);
|
||||
}
|
||||
|
||||
@ So now we're working through individual section files. The exclusion of
|
||||
the case called |sigil| throws out a macro definition in the source code,
|
||||
not a specific problem case.
|
||||
@ So now we have to read a section, looking for the existence of problem
|
||||
messages:
|
||||
|
||||
=
|
||||
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();
|
||||
while (Regexp::match(&mr, text, L"(%c*?)_p_%((%c+?)%)(%c*)")) {
|
||||
Str::clear(text);
|
||||
|
@ -167,13 +135,13 @@ void Coverage::existence_harvester(text_stream *text, text_file_position *tfp, v
|
|||
int context = CODE_MENTIONS_PCON;
|
||||
if (Str::eq(name, I"BelievedImpossible")) {
|
||||
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")) {
|
||||
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"...")) {
|
||||
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);
|
||||
DISCARD_TEXT(name);
|
||||
|
|
|
@ -71,10 +71,10 @@ int TemplateReader::I6T_file_intervene(OUTPUT_STREAM, int stage, text_stream *se
|
|||
#endif
|
||||
LOGIF(TEMPLATE_READING, "Intervention at stage %d Segment %S Part %S\n", stage, segment, part);
|
||||
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)
|
||||
TemplateReader::interpret(OUT, NULL, i6ti->alternative_segment, -1, kit);
|
||||
TemplateReader::interpret(OUT, NULL, i6ti->alternative_segment, -1, kit, NULL);
|
||||
if (stage == 0) rv = TRUE;
|
||||
}
|
||||
return rv;
|
||||
|
@ -200,7 +200,7 @@ and therefore no interventions will have happened.)
|
|||
=
|
||||
void TemplateReader::extract(text_stream *template_file, I6T_kit *kit) {
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -210,27 +210,23 @@ typedef struct contents_section_state {
|
|||
} contents_section_state;
|
||||
|
||||
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")) {
|
||||
for (int area=0; area<kit->no_i6t_file_areas; area++) {
|
||||
pathname *P = Pathnames::up(kit->i6t_files[area]);
|
||||
filename *F = Filenames::in_folder(P, I"Contents.w");
|
||||
if (TextFiles::exists(F)) {
|
||||
contents_section_state CSS;
|
||||
CSS.active = FALSE;
|
||||
CSS.sects = NEW_LINKED_LIST(text_stream);
|
||||
TextFiles::read(F, FALSE,
|
||||
NULL, FALSE, TemplateReader::read_contents, NULL, (void *) &CSS);
|
||||
text_stream *segment;
|
||||
LOOP_OVER_LINKED_LIST(segment, text_stream, CSS.sects)
|
||||
TemplateReader::interpret(OUT, sf, segment, N_escape, kit);
|
||||
return;
|
||||
web_md *Wm = WebMetadata::get(P, NULL, V2_SYNTAX, NULL, FALSE, TRUE, NULL);
|
||||
chapter_md *Cm;
|
||||
LOOP_OVER_LINKED_LIST(Cm, chapter_md, Wm->chapters_md) {
|
||||
section_md *Sm;
|
||||
LOOP_OVER_LINKED_LIST(Sm, section_md, Cm->sections_md) {
|
||||
filename *SF = Sm->source_file_for_section;
|
||||
TemplateReader::interpret(OUT, sf, Sm->sect_title, N_escape, kit, SF);
|
||||
}
|
||||
}
|
||||
}
|
||||
TemplateReader::error("unable to find a contents section to read 'all'", I"Contents.w");
|
||||
return;
|
||||
}
|
||||
FILE *Input_File = NULL;
|
||||
TEMPORARY_TEXT(heading_name);
|
||||
int skip_part = FALSE, comment = TRUE;
|
||||
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)))
|
||||
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@>;
|
||||
comment = TRUE;
|
||||
} else comment = FALSE;
|
||||
|
@ -263,7 +260,8 @@ void TemplateReader::interpret(OUTPUT_STREAM, text_stream *sf,
|
|||
part of the I6T kit.
|
||||
|
||||
@<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++)
|
||||
if (Input_File == NULL)
|
||||
Input_File = Filenames::fopen(
|
||||
|
@ -486,7 +484,7 @@ safely between |{-open-index}| and |{-close-index}|.
|
|||
if (Str::eq_wide_string(command, L"segment")) {
|
||||
(*(kit->raw_callback))(OUT, kit);
|
||||
Str::clear(OUT);
|
||||
TemplateReader::interpret(OUT, NULL, argument, -1, kit);
|
||||
TemplateReader::interpret(OUT, NULL, argument, -1, kit, NULL);
|
||||
(*(kit->raw_callback))(OUT, kit);
|
||||
Str::clear(OUT);
|
||||
continue;
|
||||
|
|
|
@ -66,50 +66,18 @@ INBUILDX = inbuild/Tangled/inbuild
|
|||
# After its declaration, we list all modules needed to compile the tool.
|
||||
|
||||
{tool} INBLORB inblorb inblorb
|
||||
{dep} INBLORB on FOUNDATION
|
||||
|
||||
{tool} INDOC indoc indoc
|
||||
{dep} INDOC on FOUNDATION
|
||||
|
||||
{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
|
||||
{dep} INPOLICY on FOUNDATION
|
||||
|
||||
{tool} INRTPS inrtps inrtps
|
||||
{dep} INRTPS on FOUNDATION
|
||||
|
||||
{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
|
||||
{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:
|
||||
|
||||
|
@ -118,41 +86,18 @@ INFORM6X = inform6/Tangled/inform6
|
|||
# While these are also executables, they only provide unit tests for modules:
|
||||
|
||||
{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
|
||||
{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
|
||||
{dep} PROBLEMSTEST on FOUNDATION
|
||||
{dep} PROBLEMSTEST on WORDS
|
||||
{dep} PROBLEMSTEST on SYNTAX
|
||||
{dep} PROBLEMSTEST on PROBLEMS
|
||||
|
||||
{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
|
||||
{dep} WORDSTEST on FOUNDATION
|
||||
{dep} WORDSTEST on WORDS
|
||||
|
||||
{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
|
||||
{dep} ARCHTEST on FOUNDATION
|
||||
{dep} ARCHTEST on ARCH
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# 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.
|
||||
# "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
|
||||
# name: so for example, for inblorb, *WEB would become INBLORBWEB.
|
||||
|
||||
.PHONY: makers
|
||||
makers:
|
||||
{repeatblock}
|
||||
{repeat-tools-block}
|
||||
$(INWEBX) $(*WEB) -makefile $(*MAKER)
|
||||
{endblock}
|
||||
{end-block}
|
||||
$(INWEBX) -prototype inform6/makescript.txt -makefile inform6/inform6.mk
|
||||
$(INWEBX) -prototype retrospective/makescript.txt -makefile retrospective/makefile
|
||||
|
||||
|
@ -201,9 +146,9 @@ makers:
|
|||
.PHONY: gitignores
|
||||
gitignores:
|
||||
$(INWEBX) -prototype scripts/gitignorescript.txt -gitignore .gitignore
|
||||
{repeatblock}
|
||||
{repeat-tools-block}
|
||||
$(INWEBX) $(*WEB) -gitignore $(*WEB)/.gitignore
|
||||
{endblock}
|
||||
{end-block}
|
||||
$(INWEBX) -prototype inform6/gitignorescript.txt -gitignore inform6/.gitignore
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
|
@ -213,9 +158,9 @@ gitignores:
|
|||
|
||||
.PHONY: versions
|
||||
versions:
|
||||
{repeatblock}
|
||||
{repeat-tools-block}
|
||||
$(*X) -version
|
||||
{endblock}
|
||||
{end-block}
|
||||
$(INFORM6X) -V
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
|
@ -261,13 +206,13 @@ forcekits:
|
|||
# Note the use of repeat to make a list: $(INBLORBX) $(INDOCX) ..., etc.
|
||||
|
||||
.PHONY: tools
|
||||
tools: {repeatspan}$(*X){endspan} $(INFORM6X)
|
||||
tools: {repeat-tools-span}$(*X){end-span} $(INFORM6X)
|
||||
|
||||
{repeatblock}
|
||||
$(*X): {dependent-files-for}*
|
||||
{repeat-tools-block}
|
||||
$(*X): {dependent-files-for-tool}*
|
||||
$(MAKE) -f $(*MAKER)
|
||||
|
||||
{endblock}
|
||||
{end-block}
|
||||
|
||||
# As ever, Inform 6 needs special handling:
|
||||
|
||||
|
@ -292,10 +237,10 @@ retrospective:
|
|||
|
||||
.PHONY: forcetools
|
||||
forcetools:
|
||||
{repeatblock}
|
||||
{repeat-tools-block}
|
||||
$(MAKE) -f $(*MAKER) force
|
||||
$(MAKE) -f inform6/inform6.mk force
|
||||
{endblock}
|
||||
{end-block}
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Target "check"
|
||||
|
@ -309,9 +254,9 @@ forcetools:
|
|||
check:
|
||||
$(MAKE) -f inform6/inform6.mk test
|
||||
$(INPOLICYX) -silence -check-problems
|
||||
{repeatblock}
|
||||
{repeat-tools-block}
|
||||
$(MAKE) -f $(*MAKER) test
|
||||
{endblock}
|
||||
{end-block}
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Target "tangle"
|
||||
|
@ -324,9 +269,9 @@ tangle:
|
|||
$(call tangle-webs)
|
||||
|
||||
define tangle-webs
|
||||
{repeatblock}
|
||||
{repeat-tools-block}
|
||||
$(INWEBX) $(*WEB) -tangle
|
||||
{endblock}
|
||||
{end-block}
|
||||
endef
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
|
@ -342,9 +287,9 @@ weave:
|
|||
$(call weave-webs)
|
||||
|
||||
define weave-webs
|
||||
{repeatblock}
|
||||
{repeat-tools-block}
|
||||
$(INWEBX) $(*WEB) $(WEAVEOPTS)
|
||||
{endblock}
|
||||
{end-block}
|
||||
endef
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
|
@ -468,9 +413,9 @@ clean:
|
|||
$(call clean-up)
|
||||
|
||||
define clean-up
|
||||
{repeatblock}
|
||||
{repeat-tools-block}
|
||||
$(MAKE) -f $(*MAKER) clean
|
||||
{endblock}
|
||||
{end-block}
|
||||
$(MAKE) -f inform6/inform6.mk clean
|
||||
endef
|
||||
|
||||
|
@ -485,9 +430,9 @@ purge:
|
|||
$(call purge-up)
|
||||
|
||||
define purge-up
|
||||
{repeatblock}
|
||||
{repeat-tools-block}
|
||||
$(MAKE) -f $(*MAKER) purge
|
||||
{endblock}
|
||||
{end-block}
|
||||
$(MAKE) -f inform6/inform6.mk purge
|
||||
endef
|
||||
|
||||
|
|
Loading…
Reference in a new issue