mirror of
https://github.com/ganelson/inform.git
synced 2024-06-26 04:00:43 +03:00
Further work redrafting inbuild module
This commit is contained in:
parent
4c05cacf9b
commit
b044dc53dd
|
@ -1,6 +1,6 @@
|
|||
# Inform 7
|
||||
|
||||
v10.1.0-alpha.1+6Q31 'Krypton' (30 March 2020)
|
||||
v10.1.0-alpha.1+6Q32 'Krypton' (31 March 2020)
|
||||
|
||||
## About Inform 7
|
||||
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
Prerelease: alpha.1
|
||||
Build Date: 30 March 2020
|
||||
Build Number: 6Q31
|
||||
Build Date: 31 March 2020
|
||||
Build Number: 6Q32
|
||||
|
|
|
@ -59,7 +59,7 @@
|
|||
<!--Weave of '1/ic' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#1">Chapter 1: Setting Up</a></li><li><b>Inbuild Control</b></li></ul><p class="purpose">The top-level controller through which client tools use this module.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP1">§1. Phases</a></li><li><a href="#SP3">§3. Startup phase</a></li><li><a href="#SP4">§4. Configuration phase</a></li><li><a href="#SP9">§9. The Pretinkering, Tinkering, Nested and Projected phases</a></li><li><a href="#SP11">§11. The Going Operational and Operational phases</a></li><li><a href="#SP12">§12. The nest list</a></li><li><a href="#SP17">§17. The shared project</a></li><li><a href="#SP22">§22. Kit requests</a></li><li><a href="#SP23">§23. Access to unmanaged Inform resources</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="#SP1">§1. Phases</a></li><li><a href="#SP3">§3. Startup phase</a></li><li><a href="#SP4">§4. Configuration phase</a></li><li><a href="#SP9">§9. The Pretinkering, Tinkering, Nested and Projected phases</a></li><li><a href="#SP11">§11. The Graph Construction and Operational phases</a></li><li><a href="#SP12">§12. The nest list</a></li><li><a href="#SP17">§17. The shared project</a></li><li><a href="#SP22">§22. Kit requests</a></li><li><a href="#SP23">§23. Access to unmanaged Inform resources</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Phases. </b>The <code class="display"><span class="extract">inbuild</span></code> module provides services to whichever program is using it:
|
||||
recall that the module is included both in <code class="display"><span class="extract">inform7</span></code> and in <code class="display"><span class="extract">inbuild</span></code> (the
|
||||
|
@ -84,7 +84,7 @@ at which time the client can freely use its facilities.
|
|||
<span class="definitionkeyword">enum</span> <span class="constant">NESTED_INBUILD_PHASE</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">PROJECTED_INBUILD_PHASE</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">TARGETED_INBUILD_PHASE</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">GOING_OPERATIONAL_INBUILD_PHASE</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">GRAPH_CONSTRUCTION_INBUILD_PHASE</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">OPERATIONAL_INBUILD_PHASE</span>
|
||||
</pre>
|
||||
|
||||
|
@ -595,7 +595,7 @@ we would attempt to detect the language of syntax if we could.
|
|||
|
||||
<p class="endnote">The function Inbuild::set_current_vm is used in <a href="#SP9_1">§9.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP11"></a><b>§11. The Going Operational and Operational phases. </b><code class="display"><span class="extract">inbuild</span></code> is now in the Targeted phase, then, meaning that the client has
|
||||
<p class="inwebparagraph"><a id="SP11"></a><b>§11. The Graph Construction and Operational phases. </b><code class="display"><span class="extract">inbuild</span></code> is now in the Targeted phase, then, meaning that the client has
|
||||
called <code class="display"><span class="extract">Inbuild::optioneering_complete</span></code> and has been making further
|
||||
preparations of its own. (For example, it could attach further kit
|
||||
dependencies to the shared project.) The client has one further duty to
|
||||
|
@ -603,22 +603,22 @@ perform: to call <code class="display"><span class="extract">Inbuild::go_operati
|
|||
for use.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">The brief "going operational" phase is used, for example, to build out
|
||||
dependency graphs. We do that copy by copy. The shared project, if there is
|
||||
one, goes first; then everything else known to us.
|
||||
<p class="inwebparagraph">The brief "graph construction" phase is used to build out dependency graphs.
|
||||
We do that copy by copy. The shared project, if there is one, goes first;
|
||||
then everything else known to us.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">inform_project</span><span class="plain"> *</span><span class="functiontext">Inbuild::go_operational</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="identifier">RUN_ONLY_IN_PHASE</span><span class="plain">(</span><span class="constant">TARGETED_INBUILD_PHASE</span><span class="plain">)</span>
|
||||
<span class="identifier">inbuild_phase</span><span class="plain"> = </span><span class="constant">GOING_OPERATIONAL_INBUILD_PHASE</span><span class="plain">;</span>
|
||||
<span class="identifier">inbuild_phase</span><span class="plain"> = </span><span class="constant">GRAPH_CONSTRUCTION_INBUILD_PHASE</span><span class="plain">;</span>
|
||||
<span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Inbuild::project</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">) </span><span class="functiontext">Copies::go_operational</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">) </span><span class="functiontext">Copies::construct_graph</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">);</span>
|
||||
<span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">inbuild_copy</span><span class="plain">)</span>
|
||||
<span class="reserved">if</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">C</span><span class="plain"> != </span><span class="identifier">P</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">))</span>
|
||||
<span class="functiontext">Copies::go_operational</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">);</span>
|
||||
<span class="functiontext">Copies::construct_graph</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">);</span>
|
||||
<span class="identifier">inbuild_phase</span><span class="plain"> = </span><span class="constant">OPERATIONAL_INBUILD_PHASE</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">census_mode</span><span class="plain">) </span><span class="functiontext">Extensions::Census::handle_census_mode</span><span class="plain">();</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inbuild::project</span><span class="plain">();</span>
|
||||
|
@ -756,11 +756,11 @@ are given precedence over those in the external folder, and so on.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Inbuild::nest_list is used in <a href="#SP9_2">§9.2</a>, 3/is (<a href="3-is.html#SP3">§3</a>, <a href="3-is.html#SP4">§4</a>), 5/kts (<a href="5-kts.html#SP1">§1</a>, <a href="5-kts.html#SP2">§2</a>), 5/ed2 (<a href="5-ed2.html#SP4">§4</a>), 5/ec (<a href="5-ec.html#SP1">§1</a>), 5/ps (<a href="5-ps.html#SP1">§1</a>, <a href="5-ps.html#SP3">§3</a>), 6/inc (<a href="6-inc.html#SP6_1">§6.1</a>, <a href="6-inc.html#SP6_1_2">§6.1.2</a>).</p>
|
||||
<p class="endnote">The function Inbuild::nest_list is used in <a href="#SP9_2">§9.2</a>, 3/is (<a href="3-is.html#SP3">§3</a>, <a href="3-is.html#SP4">§4</a>), 5/kts (<a href="5-kts.html#SP1">§1</a>, <a href="5-kts.html#SP2">§2</a>), 5/ps2 (<a href="5-ps2.html#SP1">§1</a>, <a href="5-ps2.html#SP3">§3</a>), 6/inc (<a href="6-inc.html#SP6_1">§6.1</a>, <a href="6-inc.html#SP6_1_2">§6.1.2</a>), 7/ed2 (<a href="7-ed2.html#SP4">§4</a>), 7/ec (<a href="7-ec.html#SP1">§1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Inbuild::internal is used in <a href="#SP23">§23</a>, 5/ls (<a href="5-ls.html#SP7">§7</a>).</p>
|
||||
|
||||
<p class="endnote">The function Inbuild::external is used in 5/ps (<a href="5-ps.html#SP4">§4</a>).</p>
|
||||
<p class="endnote">The function Inbuild::external is used in 5/ps2 (<a href="5-ps2.html#SP4">§4</a>).</p>
|
||||
|
||||
<p class="endnote">The function Inbuild::materials appears nowhere else.</p>
|
||||
|
||||
|
@ -784,7 +784,7 @@ the external nest is used.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Inbuild::transient is used in 5/ed (<a href="5-ed.html#SP11">§11</a>), 5/ed2 (<a href="5-ed2.html#SP3">§3</a>), 5/ec (<a href="5-ec.html#SP15">§15</a>), 5/ps (<a href="5-ps.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function Inbuild::transient is used in 5/ps2 (<a href="5-ps2.html#SP3">§3</a>), 7/ed (<a href="7-ed.html#SP11">§11</a>), 7/ed2 (<a href="7-ed2.html#SP3">§3</a>), 7/ec (<a href="7-ec.html#SP15">§15</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP17"></a><b>§17. The shared project. </b>In any single run, each of the Inform tools concerns itself with a single
|
||||
Inform 7 program. This can be presented to it either in a project bundle
|
||||
|
@ -957,7 +957,7 @@ depending on who's asking.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Inbuild::project is used in <a href="#SP11">§11</a>, 3/is (<a href="3-is.html#SP4">§4</a>), 5/es (<a href="5-es.html#SP5">§5</a>).</p>
|
||||
<p class="endnote">The function Inbuild::project is used in <a href="#SP11">§11</a>, 3/is (<a href="3-is.html#SP4">§4</a>), 5/es (<a href="5-es.html#SP3_2">§3.2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP21"></a><b>§21. </b>The materials folder sits alongside the project folder and has the same name,
|
||||
but ending <code class="display"><span class="extract">.materials</span></code> instead of <code class="display"><span class="extract">.inform</span></code>.
|
||||
|
@ -1088,7 +1088,7 @@ but they're just plain old files, and are not managed by Inbuild as "copies".
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Inbuild::file_from_installation is used in 5/ed2 (<a href="5-ed2.html#SP3_2">§3.2</a>), 5/ec (<a href="5-ec.html#SP15">§15</a>).</p>
|
||||
<p class="endnote">The function Inbuild::file_from_installation is used in 7/ed2 (<a href="7-ed2.html#SP3_2">§3.2</a>), 7/ec (<a href="7-ec.html#SP15">§15</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="1-im.html">Back to 'Inbuild Module'</a></li><li><i>(This section ends Chapter 1: Setting Up.)</i></li></ul><hr class="tocbar">
|
||||
|
|
|
@ -105,7 +105,7 @@ fields are blank.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure copy_error is accessed in 2/nst, 3/is, 5/kts, 5/ed2, 5/ec, 5/ls, 6/inc and here.</p>
|
||||
<p class="endnote">The structure copy_error is accessed in 2/nst, 3/is, 5/kts, 5/ls, 6/inc, 7/ed2, 7/ec and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>And now some creators.
|
||||
</p>
|
||||
|
@ -157,13 +157,13 @@ fields are blank.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function CopyErrors::new is used in 5/ps (<a href="5-ps.html#SP6">§6</a>), 6/st (<a href="6-st.html#SP12">§12</a>), 6/hdn (<a href="6-hdn.html#SP13_1">§13.1</a>, <a href="6-hdn.html#SP13_2">§13.2</a>, <a href="6-hdn.html#SP23_1">§23.1</a>, <a href="6-hdn.html#SP24_1">§24.1</a>, <a href="6-hdn.html#SP23_3">§23.3</a>), 6/inc (<a href="6-inc.html#SP3_1">§3.1</a>, <a href="6-inc.html#SP6_1_2">§6.1.2</a>, <a href="6-inc.html#SP7_1">§7.1</a>, <a href="6-inc.html#SP9_1">§9.1</a>, <a href="6-inc.html#SP11">§11</a>).</p>
|
||||
<p class="endnote">The function CopyErrors::new is used in 5/ps2 (<a href="5-ps2.html#SP6">§6</a>), 6/st (<a href="6-st.html#SP12">§12</a>), 6/hdn (<a href="6-hdn.html#SP13_1">§13.1</a>, <a href="6-hdn.html#SP13_2">§13.2</a>, <a href="6-hdn.html#SP23_1">§23.1</a>, <a href="6-hdn.html#SP24_1">§24.1</a>, <a href="6-hdn.html#SP23_3">§23.3</a>), 6/inc (<a href="6-inc.html#SP3_1">§3.1</a>, <a href="6-inc.html#SP6_1_2">§6.1.2</a>, <a href="6-inc.html#SP7_1">§7.1</a>, <a href="6-inc.html#SP9_1">§9.1</a>, <a href="6-inc.html#SP11">§11</a>).</p>
|
||||
|
||||
<p class="endnote">The function CopyErrors::new_T is used in 5/kts (<a href="5-kts.html#SP1">§1</a>), 5/es (<a href="5-es.html#SP1">§1</a>, <a href="5-es.html#SP1_1">§1.1</a>, <a href="5-es.html#SP1_1_3">§1.1.3</a>, <a href="5-es.html#SP1_1_3_2">§1.1.3.2</a>), 6/hdn (<a href="6-hdn.html#SP23_2">§23.2</a>), 6/inc (<a href="6-inc.html#SP6_1_1">§6.1.1</a>, <a href="6-inc.html#SP6_1_2">§6.1.2</a>).</p>
|
||||
<p class="endnote">The function CopyErrors::new_T is used in 5/es (<a href="5-es.html#SP2_2">§2.2</a>, <a href="5-es.html#SP2_2_3">§2.2.3</a>, <a href="5-es.html#SP2_2_3_2">§2.2.3.2</a>, <a href="5-es.html#SP2_3">§2.3</a>), 5/kts (<a href="5-kts.html#SP1">§1</a>), 6/hdn (<a href="6-hdn.html#SP23_2">§23.2</a>), 6/inc (<a href="6-inc.html#SP6_1_1">§6.1.1</a>, <a href="6-inc.html#SP6_1_2">§6.1.2</a>).</p>
|
||||
|
||||
<p class="endnote">The function CopyErrors::new_N is used in 5/es (<a href="5-es.html#SP1">§1</a>), 6/st (<a href="6-st.html#SP4">§4</a>).</p>
|
||||
<p class="endnote">The function CopyErrors::new_N is used in 5/es (<a href="5-es.html#SP2_3">§2.3</a>), 6/st (<a href="6-st.html#SP4">§4</a>).</p>
|
||||
|
||||
<p class="endnote">The function CopyErrors::new_F is used in 5/es (<a href="5-es.html#SP1_1">§1.1</a>), 6/st (<a href="6-st.html#SP1">§1</a>).</p>
|
||||
<p class="endnote">The function CopyErrors::new_F is used in 5/es (<a href="5-es.html#SP2_2">§2.2</a>), 6/st (<a href="6-st.html#SP1">§1</a>).</p>
|
||||
|
||||
<p class="endnote">The function CopyErrors::new_WT is used in 6/st (<a href="6-st.html#SP2">§2</a>).</p>
|
||||
|
||||
|
@ -204,7 +204,7 @@ we also offer these functions to tack extra details on:
|
|||
|
||||
<p class="endnote">The function CopyErrors::supply_works is used in 6/hdn (<a href="6-hdn.html#SP24_1">§24.1</a>).</p>
|
||||
|
||||
<p class="endnote">The function CopyErrors::supply_node is used in 5/ps (<a href="5-ps.html#SP6">§6</a>), 6/st (<a href="6-st.html#SP12">§12</a>), 6/hdn (<a href="6-hdn.html#SP13_1">§13.1</a>, <a href="6-hdn.html#SP13_2">§13.2</a>, <a href="6-hdn.html#SP23_1">§23.1</a>, <a href="6-hdn.html#SP23_2">§23.2</a>, <a href="6-hdn.html#SP23_3">§23.3</a>), 6/inc (<a href="6-inc.html#SP3_1">§3.1</a>, <a href="6-inc.html#SP6_1_1">§6.1.1</a>, <a href="6-inc.html#SP6_1_2">§6.1.2</a>, <a href="6-inc.html#SP7_1">§7.1</a>, <a href="6-inc.html#SP9_1">§9.1</a>, <a href="6-inc.html#SP11">§11</a>).</p>
|
||||
<p class="endnote">The function CopyErrors::supply_node is used in 5/ps2 (<a href="5-ps2.html#SP6">§6</a>), 6/st (<a href="6-st.html#SP12">§12</a>), 6/hdn (<a href="6-hdn.html#SP13_1">§13.1</a>, <a href="6-hdn.html#SP13_2">§13.2</a>, <a href="6-hdn.html#SP23_1">§23.1</a>, <a href="6-hdn.html#SP23_2">§23.2</a>, <a href="6-hdn.html#SP23_3">§23.3</a>), 6/inc (<a href="6-inc.html#SP3_1">§3.1</a>, <a href="6-inc.html#SP6_1_1">§6.1.1</a>, <a href="6-inc.html#SP6_1_2">§6.1.2</a>, <a href="6-inc.html#SP7_1">§7.1</a>, <a href="6-inc.html#SP9_1">§9.1</a>, <a href="6-inc.html#SP11">§11</a>).</p>
|
||||
|
||||
<p class="endnote">The function CopyErrors::supply_nodes is used in 6/hdn (<a href="6-hdn.html#SP24_1">§24.1</a>).</p>
|
||||
|
||||
|
@ -247,7 +247,7 @@ output.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function CopyErrors::write is used in 2/cps (<a href="2-cps.html#SP5">§5</a>), 5/ec (<a href="5-ec.html#SP5">§5</a>).</p>
|
||||
<p class="endnote">The function CopyErrors::write is used in 2/cps (<a href="2-cps.html#SP5">§5</a>), 7/ec (<a href="7-ec.html#SP5">§5</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5_1"></a><b>§5.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Write a lexer error</span> <span class="cwebmacronumber">5.1</span>> =
|
||||
|
|
|
@ -91,7 +91,7 @@ stored here.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure inbuild_copy is accessed in 1/ic, 2/nst, 3/bg, 3/ib, 3/bs2, 3/is, 3/is2, 3/is3, 3/is4, 4/km, 4/em, 4/lm, 4/pbm, 4/pfm, 4/tm, 4/pm, 5/kts, 5/es, 5/ed, 5/ed2, 5/ec, 5/ps, 5/ls, 6/hdn, 6/inc and here.</p>
|
||||
<p class="endnote">The structure inbuild_copy is accessed in 1/ic, 2/nst, 3/bg, 3/ib, 3/bs2, 3/is, 3/is2, 3/is3, 3/is4, 4/em, 4/km, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/kts, 5/ls, 5/ps2, 6/hdn, 6/inc, 7/ed, 7/ed2, 7/ec and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>Copies are created by the managers for the respective genres, usually when
|
||||
claiming. If you are a manager, do not call this...
|
||||
|
@ -138,7 +138,7 @@ claiming. If you are a manager, do not call this...
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Copies::new_in_file is used in 4/em (<a href="4-em.html#SP4">§4</a>), 4/pfm (<a href="4-pfm.html#SP2">§2</a>), 4/pm (<a href="4-pm.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function Copies::new_in_file is used in 4/em (<a href="4-em.html#SP4">§4</a>), 4/pm (<a href="4-pm.html#SP3">§3</a>), 4/pfm (<a href="4-pfm.html#SP2">§2</a>).</p>
|
||||
|
||||
<p class="endnote">The function Copies::new_in_path is used in 4/km (<a href="4-km.html#SP3">§3</a>), 4/lm (<a href="4-lm.html#SP3">§3</a>), 4/pbm (<a href="4-pbm.html#SP2">§2</a>), 4/tm (<a href="4-tm.html#SP3">§3</a>).</p>
|
||||
|
||||
|
@ -155,7 +155,7 @@ additional data specific to your genre:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Copies::set_content is used in 4/lm (<a href="4-lm.html#SP3">§3</a>), 4/pbm (<a href="4-pbm.html#SP2">§2</a>), 4/pfm (<a href="4-pfm.html#SP2">§2</a>), 4/tm (<a href="4-tm.html#SP3">§3</a>), 4/pm (<a href="4-pm.html#SP3">§3</a>), 5/kts (<a href="5-kts.html#SP1">§1</a>), 5/es (<a href="5-es.html#SP1">§1</a>).</p>
|
||||
<p class="endnote">The function Copies::set_content is used in 4/lm (<a href="4-lm.html#SP3">§3</a>), 4/pm (<a href="4-pm.html#SP3">§3</a>), 4/pbm (<a href="4-pbm.html#SP2">§2</a>), 4/pfm (<a href="4-pfm.html#SP2">§2</a>), 4/tm (<a href="4-tm.html#SP3">§3</a>), 5/es (<a href="5-es.html#SP2">§2</a>), 5/kts (<a href="5-kts.html#SP1">§1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. List of errors. </b>When copies are found to be malformed, error messages are attached to them
|
||||
for later reporting. These are stored in a list.
|
||||
|
@ -181,9 +181,9 @@ for later reporting. These are stored in a list.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Copies::attach_error is used in 5/kts (<a href="5-kts.html#SP1">§1</a>), 5/es (<a href="5-es.html#SP1">§1</a>, <a href="5-es.html#SP1_1">§1.1</a>, <a href="5-es.html#SP1_1_3">§1.1.3</a>, <a href="5-es.html#SP1_1_3_2">§1.1.3.2</a>), 5/ps (<a href="5-ps.html#SP6">§6</a>), 6/st (<a href="6-st.html#SP1">§1</a>, <a href="6-st.html#SP2">§2</a>, <a href="6-st.html#SP4">§4</a>, <a href="6-st.html#SP12">§12</a>), 6/hdn (<a href="6-hdn.html#SP13_1">§13.1</a>, <a href="6-hdn.html#SP13_2">§13.2</a>, <a href="6-hdn.html#SP23_1">§23.1</a>, <a href="6-hdn.html#SP24_1">§24.1</a>, <a href="6-hdn.html#SP23_2">§23.2</a>, <a href="6-hdn.html#SP23_3">§23.3</a>), 6/inc (<a href="6-inc.html#SP3_1">§3.1</a>, <a href="6-inc.html#SP6_1_1">§6.1.1</a>, <a href="6-inc.html#SP6_1_2">§6.1.2</a>, <a href="6-inc.html#SP7_1">§7.1</a>, <a href="6-inc.html#SP9_1">§9.1</a>, <a href="6-inc.html#SP11">§11</a>).</p>
|
||||
<p class="endnote">The function Copies::attach_error is used in 5/es (<a href="5-es.html#SP2_2">§2.2</a>, <a href="5-es.html#SP2_2_3">§2.2.3</a>, <a href="5-es.html#SP2_2_3_2">§2.2.3.2</a>, <a href="5-es.html#SP2_3">§2.3</a>), 5/kts (<a href="5-kts.html#SP1">§1</a>), 5/ps2 (<a href="5-ps2.html#SP6">§6</a>), 6/st (<a href="6-st.html#SP1">§1</a>, <a href="6-st.html#SP2">§2</a>, <a href="6-st.html#SP4">§4</a>, <a href="6-st.html#SP12">§12</a>), 6/hdn (<a href="6-hdn.html#SP13_1">§13.1</a>, <a href="6-hdn.html#SP13_2">§13.2</a>, <a href="6-hdn.html#SP23_1">§23.1</a>, <a href="6-hdn.html#SP24_1">§24.1</a>, <a href="6-hdn.html#SP23_2">§23.2</a>, <a href="6-hdn.html#SP23_3">§23.3</a>), 6/inc (<a href="6-inc.html#SP3_1">§3.1</a>, <a href="6-inc.html#SP6_1_1">§6.1.1</a>, <a href="6-inc.html#SP6_1_2">§6.1.2</a>, <a href="6-inc.html#SP7_1">§7.1</a>, <a href="6-inc.html#SP9_1">§9.1</a>, <a href="6-inc.html#SP11">§11</a>).</p>
|
||||
|
||||
<p class="endnote">The function Copies::list_attached_errors is used in <a href="#SP9">§9</a>, 5/ps (<a href="5-ps.html#SP4">§4</a>), 6/inc (<a href="6-inc.html#SP6_1">§6.1</a>).</p>
|
||||
<p class="endnote">The function Copies::list_attached_errors is used in <a href="#SP9">§9</a>, 5/ps2 (<a href="5-ps2.html#SP4">§4</a>), 6/inc (<a href="6-inc.html#SP6_1">§6.1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. Writing. </b></p>
|
||||
|
||||
|
@ -223,20 +223,20 @@ for later reporting. These are stored in a list.
|
|||
|
||||
<p class="endnote">The function Copies::source_text_has_been_read is used in 6/inc (<a href="6-inc.html#SP6">§6</a>).</p>
|
||||
|
||||
<p class="endnote">The function Copies::get_source_text is used in 1/ic (<a href="1-ic.html#SP9">§9</a>), 4/em (<a href="4-em.html#SP8">§8</a>), 5/ed2 (<a href="5-ed2.html#SP3_1">§3.1</a>), 6/inc (<a href="6-inc.html#SP6_1">§6.1</a>).</p>
|
||||
<p class="endnote">The function Copies::get_source_text is used in 1/ic (<a href="1-ic.html#SP9">§9</a>), 4/em (<a href="4-em.html#SP8">§8</a>), 6/inc (<a href="6-inc.html#SP6_1">§6.1</a>), 7/ed2 (<a href="7-ed2.html#SP3_1">§3.1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8"></a><b>§8. Going operational. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Copies::go_operational</span><span class="plain">(</span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
|
||||
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">-</span><span class="element">>genre</span><span class="plain">, </span><span class="constant">GENRE_GO_OPERATIONAL_MTID</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Copies::construct_graph</span><span class="plain">(</span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
|
||||
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">-</span><span class="element">>genre</span><span class="plain">, </span><span class="constant">GENRE_CONSTRUCT_GRAPH_MTID</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Copies::go_operational is used in 1/ic (<a href="1-ic.html#SP11">§11</a>).</p>
|
||||
<p class="endnote">The function Copies::construct_graph is used in 1/ic (<a href="1-ic.html#SP11">§11</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9"></a><b>§9. Miscellaneous Inbuild commands. </b>This function implements the command-line instruction to <code class="display"><span class="extract">-inspect</span></code>.
|
||||
</p>
|
||||
|
@ -367,7 +367,7 @@ its main task: building an Inform project.
|
|||
|
||||
<p class="endnote">The function Copies::copy_to is used in 3/bg (<a href="3-bg.html#SP9_1">§9.1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Copies::overwrite_error is used in 4/km (<a href="4-km.html#SP6">§6</a>), 4/em (<a href="4-em.html#SP7">§7</a>), 4/lm (<a href="4-lm.html#SP6">§6</a>), 4/tm (<a href="4-tm.html#SP6">§6</a>), 4/pm (<a href="4-pm.html#SP6">§6</a>).</p>
|
||||
<p class="endnote">The function Copies::overwrite_error is used in 4/em (<a href="4-em.html#SP7">§7</a>), 4/km (<a href="4-km.html#SP6">§6</a>), 4/lm (<a href="4-lm.html#SP6">§6</a>), 4/pm (<a href="4-pm.html#SP6">§6</a>), 4/tm (<a href="4-tm.html#SP6">§6</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="2-edt.html">Back to 'Editions'</a></li><li><a href="2-ce.html">Continue with 'Copy Errors'</a></li></ul><hr class="tocbar">
|
||||
|
|
|
@ -99,11 +99,11 @@ might work with all VMs, while version 8 required a 32-bit architecture.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Editions::new is used in 4/km (<a href="4-km.html#SP3">§3</a>), 4/em (<a href="4-em.html#SP4">§4</a>), 4/lm (<a href="4-lm.html#SP3">§3</a>), 4/pbm (<a href="4-pbm.html#SP2">§2</a>), 4/pfm (<a href="4-pfm.html#SP2">§2</a>), 4/tm (<a href="4-tm.html#SP3">§3</a>), 4/pm (<a href="4-pm.html#SP4">§4</a>), 5/es (<a href="5-es.html#SP1">§1</a>).</p>
|
||||
<p class="endnote">The function Editions::new is used in 4/em (<a href="4-em.html#SP4">§4</a>), 4/km (<a href="4-km.html#SP3">§3</a>), 4/lm (<a href="4-lm.html#SP3">§3</a>), 4/pm (<a href="4-pm.html#SP4">§4</a>), 4/pbm (<a href="4-pbm.html#SP2">§2</a>), 4/pfm (<a href="4-pfm.html#SP2">§2</a>), 4/tm (<a href="4-tm.html#SP3">§3</a>), 5/es (<a href="5-es.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Editions::write is used in <a href="#SP3">§3</a>, 2/cps (<a href="2-cps.html#SP6">§6</a>).</p>
|
||||
|
||||
<p class="endnote">The structure inbuild_edition is accessed in 2/wrk, 2/cps, 2/rqr, 2/nst, 3/bg, 3/is2, 4/km, 4/em, 4/lm, 4/pbm, 4/pfm, 4/tm, 4/pm, 5/kts, 5/es, 5/ed, 5/ed2, 5/ec, 5/ts, 5/ps, 5/ls, 5/ps2, 6/hdn, 6/inc, 6/vmg and here.</p>
|
||||
<p class="endnote">The structure inbuild_edition is accessed in 2/wrk, 2/cps, 2/rqr, 2/nst, 3/bg, 3/is2, 4/em, 4/km, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/kts, 5/ls, 5/ps, 5/ps2, 5/ts, 6/hdn, 6/inc, 6/vmg, 7/ed, 7/ed2, 7/ec and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>When a copy is to be duplicated into a nest <code class="display"><span class="extract">N</span></code>, we need to work out where
|
||||
to put it. For example, version 2.1 of the extension Marbles by Steve Hogarth
|
||||
|
@ -130,7 +130,7 @@ contributes only the un-filename-extended leafname <code class="display"><span c
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Editions::write_canonical_leaf is used in 4/km (<a href="4-km.html#SP6">§6</a>), 4/em (<a href="4-em.html#SP7">§7</a>), 4/lm (<a href="4-lm.html#SP6">§6</a>), 4/tm (<a href="4-tm.html#SP6">§6</a>), 4/pm (<a href="4-pm.html#SP6">§6</a>).</p>
|
||||
<p class="endnote">The function Editions::write_canonical_leaf is used in 4/em (<a href="4-em.html#SP7">§7</a>), 4/km (<a href="4-km.html#SP6">§6</a>), 4/lm (<a href="4-lm.html#SP6">§6</a>), 4/pm (<a href="4-pm.html#SP6">§6</a>), 4/tm (<a href="4-tm.html#SP6">§6</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>The <code class="display"><span class="extract">-inspect</span></code> command of Inbuild uses the following.
|
||||
</p>
|
||||
|
|
|
@ -100,7 +100,7 @@ the instance <code class="display"><span class="extract">kit_genre</span></code>
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Genres::new is used in 4/km (<a href="4-km.html#SP1">§1</a>), 4/em (<a href="4-em.html#SP2">§2</a>), 4/lm (<a href="4-lm.html#SP1">§1</a>), 4/pbm (<a href="4-pbm.html#SP1">§1</a>), 4/pfm (<a href="4-pfm.html#SP1">§1</a>), 4/tm (<a href="4-tm.html#SP1">§1</a>), 4/pm (<a href="4-pm.html#SP1">§1</a>).</p>
|
||||
<p class="endnote">The function Genres::new is used in 4/em (<a href="4-em.html#SP2">§2</a>), 4/km (<a href="4-km.html#SP1">§1</a>), 4/lm (<a href="4-lm.html#SP1">§1</a>), 4/pm (<a href="4-pm.html#SP1">§1</a>), 4/pbm (<a href="4-pbm.html#SP1">§1</a>), 4/pfm (<a href="4-pfm.html#SP1">§1</a>), 4/tm (<a href="4-tm.html#SP1">§1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Genres::name is used in 2/cps (<a href="2-cps.html#SP9">§9</a>).</p>
|
||||
|
||||
|
@ -216,6 +216,10 @@ is scanned for metadata during claiming, only the opening line is looked at.)
|
|||
text. It will never be called twice on the same copy.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">Text should actually be read by feeding it into the lexer. Inbuild will take
|
||||
of it from there.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="definitions">
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">GENRE_READ_SOURCE_TEXT_FOR_MTID</span>
|
||||
|
@ -228,7 +232,7 @@ text. It will never be called twice on the same copy.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8"></a><b>§8. </b>At the Going Operational phase of Inbuild, each copy is offered the chance
|
||||
<p class="inwebparagraph"><a id="SP8"></a><b>§8. </b>At the Graph Construction phase of Inbuild, each copy is offered the chance
|
||||
to finalise its internal representation. For example, this may be when its
|
||||
build graph is constructed, because we can now know for sure that there are
|
||||
no further unsuspected dependencies.
|
||||
|
@ -238,17 +242,13 @@ no further unsuspected dependencies.
|
|||
provides it) which has been claimed by Inbuild.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">Text should actually be read by feeding it into the lexer. Inbuild will take
|
||||
of it from there.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="definitions">
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">GENRE_GO_OPERATIONAL_MTID</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">GENRE_CONSTRUCT_GRAPH_MTID</span>
|
||||
</pre>
|
||||
|
||||
<pre class="display">
|
||||
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">GENRE_GO_OPERATIONAL_MTID</span><span class="plain">,</span>
|
||||
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">GENRE_CONSTRUCT_GRAPH_MTID</span><span class="plain">,</span>
|
||||
<span class="reserved">inbuild_genre</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">, </span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">)</span>
|
||||
</pre>
|
||||
|
||||
|
|
|
@ -87,7 +87,7 @@ positions in the file system hierarchy which may or may not exist.
|
|||
|
||||
<p class="endnote">The function Nests::new is used in 1/ic (<a href="1-ic.html#SP13">§13</a>).</p>
|
||||
|
||||
<p class="endnote">The structure inbuild_nest is accessed in 1/ic, 3/bg, 3/is2, 4/km, 4/em, 4/lm, 4/tm, 4/pm, 5/ps and here.</p>
|
||||
<p class="endnote">The structure inbuild_nest is accessed in 1/ic, 3/bg, 3/is2, 4/em, 4/km, 4/lm, 4/pm, 4/tm, 5/ps2 and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>Nests used by the Inform and Inbuild tools are tagged with the following
|
||||
comstamts. (There used to be quite a good joke here, but refactoring of the
|
||||
|
@ -120,7 +120,7 @@ see below for why. Lower-tag-numbered origins are better than later ones.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Nests::get_tag is used in <a href="#SP9">§9</a>, 1/ic (<a href="1-ic.html#SP14">§14</a>), 3/is2 (<a href="3-is2.html#SP1">§1</a>), 5/ed2 (<a href="5-ed2.html#SP4">§4</a>), 5/ec (<a href="5-ec.html#SP1">§1</a>, <a href="5-ec.html#SP3_1">§3.1</a>, <a href="5-ec.html#SP3_2">§3.2</a>), 6/inc (<a href="6-inc.html#SP6_1">§6.1</a>).</p>
|
||||
<p class="endnote">The function Nests::get_tag is used in <a href="#SP9">§9</a>, 1/ic (<a href="1-ic.html#SP14">§14</a>), 3/is2 (<a href="3-is2.html#SP1">§1</a>), 6/inc (<a href="6-inc.html#SP6_1">§6.1</a>), 7/ed2 (<a href="7-ed2.html#SP4">§4</a>), 7/ec (<a href="7-ec.html#SP1">§1</a>, <a href="7-ec.html#SP3_1">§3.1</a>, <a href="7-ec.html#SP3_2">§3.2</a>).</p>
|
||||
|
||||
<p class="endnote">The function Nests::set_tag is used in 1/ic (<a href="1-ic.html#SP13">§13</a>).</p>
|
||||
|
||||
|
@ -184,7 +184,7 @@ we create one of these for each hit:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure inbuild_search_result is accessed in 2/ce, 3/is, 5/kts, 5/ed2, 5/ec, 5/ls, 6/inc and here.</p>
|
||||
<p class="endnote">The structure inbuild_search_result is accessed in 2/ce, 3/is, 5/kts, 5/ls, 6/inc, 7/ed2, 7/ec and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b>These can be created only as entries in a list:
|
||||
</p>
|
||||
|
@ -204,7 +204,7 @@ we create one of these for each hit:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Nests::add_search_result is used in 4/km (<a href="4-km.html#SP5">§5</a>), 4/em (<a href="4-em.html#SP6">§6</a>), 4/lm (<a href="4-lm.html#SP5">§5</a>), 4/tm (<a href="4-tm.html#SP5">§5</a>), 4/pm (<a href="4-pm.html#SP5">§5</a>).</p>
|
||||
<p class="endnote">The function Nests::add_search_result is used in 4/em (<a href="4-em.html#SP6">§6</a>), 4/km (<a href="4-km.html#SP5">§5</a>), 4/lm (<a href="4-lm.html#SP5">§5</a>), 4/pm (<a href="4-pm.html#SP5">§5</a>), 4/tm (<a href="4-tm.html#SP5">§5</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. </b>And here is our search engine, such as it is. For each nest, we ask each
|
||||
genre's manager to look for copies of that genre:
|
||||
|
@ -225,7 +225,7 @@ genre's manager to look for copies of that genre:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Nests::search_for is used in <a href="#SP8">§8</a>, 1/ic (<a href="1-ic.html#SP9_2">§9.2</a>), 5/ed2 (<a href="5-ed2.html#SP4">§4</a>), 5/ec (<a href="5-ec.html#SP3">§3</a>), 6/inc (<a href="6-inc.html#SP6_1_2">§6.1.2</a>).</p>
|
||||
<p class="endnote">The function Nests::search_for is used in <a href="#SP8">§8</a>, 1/ic (<a href="1-ic.html#SP9_2">§9.2</a>), 6/inc (<a href="6-inc.html#SP6_1_2">§6.1.2</a>), 7/ed2 (<a href="7-ed2.html#SP4">§4</a>), 7/ec (<a href="7-ec.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8"></a><b>§8. </b>Oftentimes, we want only the single best result, and won't even look at the
|
||||
others:
|
||||
|
|
|
@ -78,7 +78,7 @@ we can give a semantic version number range:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure inbuild_requirement is accessed in 2/wrk, 2/edt, 2/cps, 3/bg, 3/is2, 4/km, 4/em, 4/lm, 4/pbm, 4/pfm, 4/tm, 4/pm, 5/kts, 5/es, 5/ed, 5/ed2, 5/ec, 5/ps, 5/ls, 6/hdn, 6/inc and here.</p>
|
||||
<p class="endnote">The structure inbuild_requirement is accessed in 2/wrk, 2/edt, 2/cps, 3/bg, 3/is2, 4/em, 4/km, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/kts, 5/ls, 5/ps2, 6/hdn, 6/inc, 7/ed, 7/ed2, 7/ec and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>Here are some creators:
|
||||
</p>
|
||||
|
@ -109,9 +109,9 @@ we can give a semantic version number range:
|
|||
|
||||
<p class="endnote">The function Requirements::new is used in 6/inc (<a href="6-inc.html#SP5_1">§5.1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Requirements::any_version_of is used in 3/is (<a href="3-is.html#SP3">§3</a>, <a href="3-is.html#SP4">§4</a>), 5/kts (<a href="5-kts.html#SP1">§1</a>), 5/ed2 (<a href="5-ed2.html#SP4">§4</a>), 5/ls (<a href="5-ls.html#SP7">§7</a>), 6/inc (<a href="6-inc.html#SP6_1_2">§6.1.2</a>).</p>
|
||||
<p class="endnote">The function Requirements::any_version_of is used in 3/is (<a href="3-is.html#SP3">§3</a>, <a href="3-is.html#SP4">§4</a>), 5/kts (<a href="5-kts.html#SP1">§1</a>), 5/ls (<a href="5-ls.html#SP7">§7</a>), 6/inc (<a href="6-inc.html#SP6_1_2">§6.1.2</a>), 7/ed2 (<a href="7-ed2.html#SP4">§4</a>).</p>
|
||||
|
||||
<p class="endnote">The function Requirements::anything_of_genre is used in 1/ic (<a href="1-ic.html#SP9_2">§9.2</a>), 5/ec (<a href="5-ec.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function Requirements::anything_of_genre is used in 1/ic (<a href="1-ic.html#SP9_2">§9.2</a>), 7/ec (<a href="7-ec.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Requirements::anything is used in <a href="#SP3">§3</a>.</p>
|
||||
|
||||
|
@ -314,7 +314,7 @@ a requirement, then so will all other copies of it.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Requirements::meets is used in 4/km (<a href="4-km.html#SP5">§5</a>), 4/em (<a href="4-em.html#SP6">§6</a>), 4/lm (<a href="4-lm.html#SP5">§5</a>), 4/tm (<a href="4-tm.html#SP5">§5</a>), 4/pm (<a href="4-pm.html#SP5">§5</a>), 5/kts (<a href="5-kts.html#SP2">§2</a>), 5/es (<a href="5-es.html#SP4">§4</a>), 5/ed2 (<a href="5-ed2.html#SP4">§4</a>), 6/inc (<a href="6-inc.html#SP6">§6</a>).</p>
|
||||
<p class="endnote">The function Requirements::meets is used in 4/em (<a href="4-em.html#SP6">§6</a>), 4/km (<a href="4-km.html#SP5">§5</a>), 4/lm (<a href="4-lm.html#SP5">§5</a>), 4/pm (<a href="4-pm.html#SP5">§5</a>), 4/tm (<a href="4-tm.html#SP5">§5</a>), 5/es (<a href="5-es.html#SP7">§7</a>), 5/kts (<a href="5-kts.html#SP2">§2</a>), 6/inc (<a href="6-inc.html#SP6">§6</a>), 7/ed2 (<a href="7-ed2.html#SP4">§4</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="2-ce.html">Back to 'Copy Errors'</a></li><li><a href="2-nst.html">Continue with 'Nests'</a></li></ul><hr class="tocbar">
|
||||
|
|
|
@ -90,7 +90,7 @@ combination of the textual names and the hash code:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure inbuild_work is accessed in 2/edt, 2/cps, 2/rqr, 3/bg, 3/is2, 4/km, 4/em, 4/lm, 4/pbm, 4/pfm, 4/tm, 4/pm, 5/kts, 5/es, 5/ed, 5/ed2, 5/ec, 5/ps, 5/ls, 6/inc and here.</p>
|
||||
<p class="endnote">The structure inbuild_work is accessed in 2/edt, 2/cps, 2/rqr, 3/bg, 3/is2, 4/em, 4/km, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/kts, 5/ls, 5/ps2, 6/inc, 7/ed, 7/ed2, 7/ec and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>Each work structure is written only once, and its title and author name are
|
||||
not subsequently altered.
|
||||
|
@ -112,7 +112,7 @@ not subsequently altered.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Works::new is used in <a href="#SP10">§10</a>, 2/rqr (<a href="2-rqr.html#SP2">§2</a>), 3/is (<a href="3-is.html#SP3">§3</a>, <a href="3-is.html#SP4">§4</a>), 4/em (<a href="4-em.html#SP4">§4</a>), 4/lm (<a href="4-lm.html#SP3">§3</a>), 4/pbm (<a href="4-pbm.html#SP2">§2</a>), 4/pfm (<a href="4-pfm.html#SP2">§2</a>), 4/tm (<a href="4-tm.html#SP3">§3</a>), 5/kts (<a href="5-kts.html#SP1">§1</a>), 5/es (<a href="5-es.html#SP1">§1</a>), 5/ed (<a href="5-ed.html#SP10">§10</a>), 5/ls (<a href="5-ls.html#SP7">§7</a>), 6/hdn (<a href="6-hdn.html#SP13_3">§13.3</a>), 6/inc (<a href="6-inc.html#SP5_1">§5.1</a>).</p>
|
||||
<p class="endnote">The function Works::new is used in <a href="#SP10">§10</a>, 2/rqr (<a href="2-rqr.html#SP2">§2</a>), 3/is (<a href="3-is.html#SP3">§3</a>, <a href="3-is.html#SP4">§4</a>), 4/em (<a href="4-em.html#SP4">§4</a>), 4/lm (<a href="4-lm.html#SP3">§3</a>), 4/pbm (<a href="4-pbm.html#SP2">§2</a>), 4/pfm (<a href="4-pfm.html#SP2">§2</a>), 4/tm (<a href="4-tm.html#SP3">§3</a>), 5/es (<a href="5-es.html#SP2_3">§2.3</a>), 5/kts (<a href="5-kts.html#SP1">§1</a>), 5/ls (<a href="5-ls.html#SP7">§7</a>), 6/hdn (<a href="6-hdn.html#SP13_3">§13.3</a>), 6/inc (<a href="6-inc.html#SP5_1">§5.1</a>), 7/ed (<a href="7-ed.html#SP10">§10</a>).</p>
|
||||
|
||||
<p class="endnote">The function Works::new_raw is used in 4/km (<a href="4-km.html#SP3">§3</a>), 4/pm (<a href="4-pm.html#SP4">§4</a>).</p>
|
||||
|
||||
|
@ -203,7 +203,7 @@ begins at the start of the text, after a hyphen, or after a bracket. Thus
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Works::normalise_casing is used in <a href="#SP3">§3</a>, 5/es (<a href="5-es.html#SP1_1_1">§1.1.1</a>).</p>
|
||||
<p class="endnote">The function Works::normalise_casing is used in <a href="#SP3">§3</a>, 5/es (<a href="5-es.html#SP2_2_1">§2.2.1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. Printing. </b>As noted above, the raw forms are used for output.
|
||||
</p>
|
||||
|
@ -227,7 +227,7 @@ begins at the start of the text, after a hyphen, or after a bracket. Thus
|
|||
|
||||
<p class="endnote">The function Works::write is used in 2/edt (<a href="2-edt.html#SP1">§1</a>), 3/bg (<a href="3-bg.html#SP7">§7</a>, <a href="3-bg.html#SP8">§8</a>).</p>
|
||||
|
||||
<p class="endnote">The function Works::write_to_HTML_file is used in <a href="#SP6">§6</a>, 5/ed (<a href="5-ed.html#SP19_2">§19.2</a>), 5/ed2 (<a href="5-ed2.html#SP3_2_1">§3.2.1</a>).</p>
|
||||
<p class="endnote">The function Works::write_to_HTML_file is used in <a href="#SP6">§6</a>, 7/ed (<a href="7-ed.html#SP19_2">§19.2</a>), 7/ed2 (<a href="7-ed2.html#SP3_2_1">§3.2.1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b>The following is only sensible for extensions, and is used when Inform
|
||||
generates its Extensions index entries.
|
||||
|
@ -248,7 +248,7 @@ generates its Extensions index entries.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Works::write_link_to_HTML_file is used in 5/ed (<a href="5-ed.html#SP20_1">§20.1</a>).</p>
|
||||
<p class="endnote">The function Works::write_link_to_HTML_file is used in 7/ed (<a href="7-ed.html#SP20_1">§20.1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. </b>The Inbuild module provides the <code class="display"><span class="extract">%X</span></code> escape sequence for printing names of
|
||||
works. (The X used to stand for Extension.) <code class="display"><span class="extract">%<X</span></code> ptovides an abbreviated form.
|
||||
|
@ -307,7 +307,7 @@ order-preserving. To emphasise this we return true or false rather than a
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Works::match is used in <a href="#SP10">§10</a>, <a href="#SP11">§11</a>, <a href="#SP12">§12</a>, <a href="#SP13">§13</a>, 5/ed (<a href="5-ed.html#SP9">§9</a>, <a href="5-ed.html#SP18">§18</a>, <a href="5-ed.html#SP18_2">§18.2</a>), 5/ec (<a href="5-ec.html#SP3_1">§3.1</a>), 6/hdn (<a href="6-hdn.html#SP23">§23</a>, <a href="6-hdn.html#SP23_2">§23.2</a>).</p>
|
||||
<p class="endnote">The function Works::match is used in <a href="#SP10">§10</a>, <a href="#SP11">§11</a>, <a href="#SP12">§12</a>, <a href="#SP13">§13</a>, 6/hdn (<a href="6-hdn.html#SP23">§23</a>, <a href="6-hdn.html#SP23_2">§23.2</a>), 7/ed (<a href="7-ed.html#SP9">§9</a>, <a href="7-ed.html#SP18">§18</a>, <a href="7-ed.html#SP18_2">§18.2</a>), 7/ec (<a href="7-ec.html#SP3_1">§3.1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9"></a><b>§9. </b>These are quite a deal slower, but are trichotomous and can be used for
|
||||
sorting.
|
||||
|
@ -350,13 +350,13 @@ sorting.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Works::compare is used in 5/ed (<a href="5-ed.html#SP18">§18</a>), 5/ec (<a href="5-ec.html#SP8">§8</a>).</p>
|
||||
<p class="endnote">The function Works::compare is used in 7/ed (<a href="7-ed.html#SP18">§18</a>), 7/ec (<a href="7-ec.html#SP8">§8</a>).</p>
|
||||
|
||||
<p class="endnote">The function Works::compare_by_title is used in 5/ec (<a href="5-ec.html#SP8">§8</a>).</p>
|
||||
<p class="endnote">The function Works::compare_by_title is used in 7/ec (<a href="7-ec.html#SP8">§8</a>).</p>
|
||||
|
||||
<p class="endnote">The function Works::compare_by_date is used in 5/ec (<a href="5-ec.html#SP8">§8</a>).</p>
|
||||
<p class="endnote">The function Works::compare_by_date is used in 7/ec (<a href="7-ec.html#SP8">§8</a>).</p>
|
||||
|
||||
<p class="endnote">The function Works::compare_by_length is used in 5/ec (<a href="5-ec.html#SP8">§8</a>).</p>
|
||||
<p class="endnote">The function Works::compare_by_length is used in 7/ec (<a href="7-ec.html#SP8">§8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP10"></a><b>§10. </b>Because Basic Inform and the Standard Rules extensions are treated slightly
|
||||
differently by the documentation, and so forth, it's convenient to provide a
|
||||
|
@ -390,7 +390,7 @@ single function testing if a work refers to them.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Works::is_standard_rules is used in <a href="#SP6">§6</a>, <a href="#SP7">§7</a>, 4/em (<a href="4-em.html#SP4">§4</a>), 5/ed2 (<a href="5-ed2.html#SP3_2_1">§3.2.1</a>).</p>
|
||||
<p class="endnote">The function Works::is_standard_rules is used in <a href="#SP6">§6</a>, <a href="#SP7">§7</a>, 4/em (<a href="4-em.html#SP4">§4</a>), 7/ed2 (<a href="7-ed2.html#SP3_2_1">§3.2.1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Works::is_basic_inform is used in <a href="#SP7">§7</a>.</p>
|
||||
|
||||
|
@ -464,9 +464,9 @@ indeed, the typical number will be 0 or 1.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Works::add_to_database is used in <a href="#SP10">§10</a>, 4/km (<a href="4-km.html#SP4">§4</a>), 4/em (<a href="4-em.html#SP5">§5</a>), 4/lm (<a href="4-lm.html#SP4">§4</a>), 4/pbm (<a href="4-pbm.html#SP3">§3</a>), 4/pfm (<a href="4-pfm.html#SP3">§3</a>), 4/tm (<a href="4-tm.html#SP4">§4</a>), 4/pm (<a href="4-pm.html#SP4">§4</a>), 5/es (<a href="5-es.html#SP1">§1</a>), 5/ed (<a href="5-ed.html#SP10">§10</a>), 5/ec (<a href="5-ec.html#SP3_2">§3.2</a>), 6/hdn (<a href="6-hdn.html#SP13_3">§13.3</a>), 6/inc (<a href="6-inc.html#SP5_1">§5.1</a>).</p>
|
||||
<p class="endnote">The function Works::add_to_database is used in <a href="#SP10">§10</a>, 4/em (<a href="4-em.html#SP5">§5</a>), 4/km (<a href="4-km.html#SP4">§4</a>), 4/lm (<a href="4-lm.html#SP4">§4</a>), 4/pm (<a href="4-pm.html#SP4">§4</a>), 4/pbm (<a href="4-pbm.html#SP3">§3</a>), 4/pfm (<a href="4-pfm.html#SP3">§3</a>), 4/tm (<a href="4-tm.html#SP4">§4</a>), 5/es (<a href="5-es.html#SP2">§2</a>), 6/hdn (<a href="6-hdn.html#SP13_3">§13.3</a>), 6/inc (<a href="6-inc.html#SP5_1">§5.1</a>), 7/ed (<a href="7-ed.html#SP10">§10</a>), 7/ec (<a href="7-ec.html#SP3_2">§3.2</a>).</p>
|
||||
|
||||
<p class="endnote">The structure inbuild_work_database_entry is accessed in 2/edt, 2/cps, 2/rqr, 3/bg, 3/is2, 4/km, 4/em, 4/lm, 4/pbm, 4/pfm, 4/tm, 4/pm, 5/kts, 5/es, 5/ed, 5/ed2, 5/ec, 5/ps, 5/ls, 6/hdn, 6/inc and here.</p>
|
||||
<p class="endnote">The structure inbuild_work_database_entry is accessed in 2/edt, 2/cps, 2/rqr, 3/bg, 3/is2, 4/em, 4/km, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/kts, 5/ls, 5/ps2, 6/hdn, 6/inc, 7/ed, 7/ed2, 7/ec and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP12"></a><b>§12. </b>This gives us reasonably rapid access to a shared date:
|
||||
</p>
|
||||
|
@ -586,23 +586,23 @@ indeed, the typical number will be 0 or 1.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Works::set_usage_date is used in 5/ed (<a href="5-ed.html#SP10">§10</a>).</p>
|
||||
<p class="endnote">The function Works::set_usage_date is used in 7/ed (<a href="7-ed.html#SP10">§10</a>).</p>
|
||||
|
||||
<p class="endnote">The function Works::set_sort_date is used in 5/ed (<a href="5-ed.html#SP10">§10</a>).</p>
|
||||
<p class="endnote">The function Works::set_sort_date is used in 7/ed (<a href="7-ed.html#SP10">§10</a>).</p>
|
||||
|
||||
<p class="endnote">The function Works::get_usage_date is used in 5/ec (<a href="5-ec.html#SP6_7_4_4">§6.7.4.4</a>).</p>
|
||||
<p class="endnote">The function Works::get_usage_date is used in 7/ec (<a href="7-ec.html#SP6_7_4_4">§6.7.4.4</a>).</p>
|
||||
|
||||
<p class="endnote">The function Works::get_sort_date is used in <a href="#SP9">§9</a>.</p>
|
||||
|
||||
<p class="endnote">The function Works::set_word_count is used in 5/ed (<a href="5-ed.html#SP10">§10</a>).</p>
|
||||
<p class="endnote">The function Works::set_word_count is used in 7/ed (<a href="7-ed.html#SP10">§10</a>).</p>
|
||||
|
||||
<p class="endnote">The function Works::get_sort_word_count is used in <a href="#SP9">§9</a>.</p>
|
||||
|
||||
<p class="endnote">The function Works::forgot is used in 5/ec (<a href="5-ec.html#SP6_7_4_4">§6.7.4.4</a>).</p>
|
||||
<p class="endnote">The function Works::forgot is used in 7/ec (<a href="7-ec.html#SP6_7_4_4">§6.7.4.4</a>).</p>
|
||||
|
||||
<p class="endnote">The function Works::never is used in 5/ec (<a href="5-ec.html#SP6_7_4_4">§6.7.4.4</a>).</p>
|
||||
<p class="endnote">The function Works::never is used in 7/ec (<a href="7-ec.html#SP6_7_4_4">§6.7.4.4</a>).</p>
|
||||
|
||||
<p class="endnote">The function Works::get_word_count is used in 5/ec (<a href="5-ec.html#SP6_7_4_4">§6.7.4.4</a>).</p>
|
||||
<p class="endnote">The function Works::get_word_count is used in 7/ec (<a href="7-ec.html#SP6_7_4_4">§6.7.4.4</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP13"></a><b>§13. </b>The purpose of the hash table is to enable us to reply quickly when asked
|
||||
for one of the following usage counts:
|
||||
|
@ -620,7 +620,7 @@ for one of the following usage counts:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Works::no_times_used_in_context is used in 5/ed (<a href="5-ed.html#SP8">§8</a>), 5/ec (<a href="5-ec.html#SP7">§7</a>), 6/hdn (<a href="6-hdn.html#SP23">§23</a>).</p>
|
||||
<p class="endnote">The function Works::no_times_used_in_context is used in 6/hdn (<a href="6-hdn.html#SP23">§23</a>), 7/ed (<a href="7-ed.html#SP8">§8</a>), 7/ec (<a href="7-ec.html#SP7">§7</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP14"></a><b>§14. </b>The work hash table makes quite interesting reading, so:
|
||||
</p>
|
||||
|
@ -646,7 +646,7 @@ for one of the following usage counts:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Works::log_work_hash_table is used in 5/ec (<a href="5-ec.html#SP11">§11</a>).</p>
|
||||
<p class="endnote">The function Works::log_work_hash_table is used in 7/ec (<a href="7-ec.html#SP11">§11</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP15"></a><b>§15. Documentation links. </b>This is where HTML links to extension documentation are created; the URL for
|
||||
each extension's page is generated from its <code class="display"><span class="extract">inbuild_work</span></code>.
|
||||
|
@ -686,11 +686,11 @@ each extension's page is generated from its <code class="display"><span class="e
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Works::begin_extension_link is used in 5/ec (<a href="5-ec.html#SP6_7_4_1">§6.7.4.1</a>).</p>
|
||||
<p class="endnote">The function Works::begin_extension_link is used in 7/ec (<a href="7-ec.html#SP6_7_4_1">§6.7.4.1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Works::escape_apostrophes appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Works::end_extension_link is used in 5/ec (<a href="5-ec.html#SP6_7_4_1">§6.7.4.1</a>).</p>
|
||||
<p class="endnote">The function Works::end_extension_link is used in 7/ec (<a href="7-ec.html#SP6_7_4_1">§6.7.4.1</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="2-gnr.html">Back to 'Genres'</a></li><li><a href="2-edt.html">Continue with 'Editions'</a></li></ul><hr class="tocbar">
|
||||
|
|
|
@ -115,7 +115,7 @@ compiled, is a file vertex.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure build_vertex is accessed in 1/ic, 3/ib, 3/bs2, 3/is, 3/is2, 3/is3, 3/is4, 4/em, 4/lm, 4/pbm, 4/pfm, 4/tm, 4/pm, 5/kts, 5/es, 5/ed, 5/ed2, 5/ts, 5/ps, 5/ls, 5/ps2, 6/hdn, 6/inc and here.</p>
|
||||
<p class="endnote">The structure build_vertex is accessed in 1/ic, 3/ib, 3/bs2, 3/is, 3/is2, 3/is3, 3/is4, 4/em, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/kts, 5/ls, 5/ps, 5/ps2, 5/ts, 6/hdn, 6/inc, 7/ed, 7/ed2 and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. Creation. </b>First, the three colours of vertex.
|
||||
</p>
|
||||
|
@ -155,7 +155,7 @@ compiled, is a file vertex.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Graphs::file_vertex is used in <a href="#SP3">§3</a>, 5/kts (<a href="5-kts.html#SP2">§2</a>), 5/ps (<a href="5-ps.html#SP1">§1</a>, <a href="5-ps.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function Graphs::file_vertex is used in <a href="#SP3">§3</a>, 5/kts (<a href="5-kts.html#SP2">§2</a>), 5/ps2 (<a href="5-ps2.html#SP1">§1</a>, <a href="5-ps2.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Graphs::req_vertex is used in 5/kts (<a href="5-kts.html#SP2">§2</a>), 6/inc (<a href="6-inc.html#SP6_1">§6.1</a>).</p>
|
||||
|
||||
|
@ -208,9 +208,9 @@ at most one edge of each colour.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Graphs::need_this_to_build is used in 5/kts (<a href="5-kts.html#SP2">§2</a>), 5/ps (<a href="5-ps.html#SP3">§3</a>), 6/inc (<a href="6-inc.html#SP1_1">§1.1</a>, <a href="6-inc.html#SP6_1">§6.1</a>).</p>
|
||||
<p class="endnote">The function Graphs::need_this_to_build is used in 5/kts (<a href="5-kts.html#SP2">§2</a>), 5/ps2 (<a href="5-ps2.html#SP3">§3</a>), 6/inc (<a href="6-inc.html#SP1_1">§1.1</a>, <a href="6-inc.html#SP6_1">§6.1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Graphs::need_this_to_use is used in 5/kts (<a href="5-kts.html#SP2">§2</a>), 5/ps (<a href="5-ps.html#SP3">§3</a>), 6/inc (<a href="6-inc.html#SP1_1">§1.1</a>).</p>
|
||||
<p class="endnote">The function Graphs::need_this_to_use is used in 5/kts (<a href="5-kts.html#SP2">§2</a>), 5/ps2 (<a href="5-ps2.html#SP3">§3</a>), 6/inc (<a href="6-inc.html#SP1_1">§1.1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b>The script attached to a vertex is a list of instructions for how to build
|
||||
the resource it refers to. Some vertices have no instructions provided, so:
|
||||
|
|
|
@ -87,7 +87,7 @@ for the tools <code class="display"><span class="extract">inter</span></code>, <
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure build_methodology is accessed in 3/bs2, 3/is, 3/is2, 3/is3, 3/is4, 4/km, 4/em, 4/lm, 4/tm, 4/pm and here.</p>
|
||||
<p class="endnote">The structure build_methodology is accessed in 3/bs2, 3/is, 3/is2, 3/is3, 3/is4, 4/em, 4/km, 4/lm, 4/pm, 4/tm and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>If the <code class="display"><span class="extract">tangled</span></code> flag is set, we expect <code class="display"><span class="extract">inform7</span></code>, for example, to be at
|
||||
<code class="display"><span class="extract">tools_path/inform7/Tangled/inform7</span></code>; if it is clear, we expect it only to
|
||||
|
|
|
@ -133,7 +133,7 @@ to access any of <code class="display"><span class="extract">inbuild</span></cod
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure build_step is accessed in 2/cps, 3/bg, 3/is, 3/is2, 3/is3, 3/is4, 4/km, 4/em, 5/kts, 5/ps, 6/hdn, 6/inc and here.</p>
|
||||
<p class="endnote">The structure build_step is accessed in 2/cps, 3/bg, 3/is, 3/is2, 3/is3, 3/is4, 4/em, 4/km, 5/kts, 5/ps2, 6/hdn, 6/inc and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>We build scripts for a vertex by attaching one step at a time to it:
|
||||
</p>
|
||||
|
@ -158,7 +158,7 @@ to access any of <code class="display"><span class="extract">inbuild</span></cod
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function BuildSteps::attach is used in 5/kts (<a href="5-kts.html#SP2">§2</a>), 5/ps (<a href="5-ps.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function BuildSteps::attach is used in 5/kts (<a href="5-kts.html#SP2">§2</a>), 5/ps2 (<a href="5-ps2.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. Execution. </b>Note that this prints a log of shell commands generated to <code class="display"><span class="extract">stdout</span></code> when
|
||||
we are running inside Inbuild at the command line, but not when we are running
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>4/km</title>
|
||||
<title>3/is4</title>
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
@ -57,7 +57,7 @@
|
|||
<main role="main">
|
||||
|
||||
<!--Weave of '4/em' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#4">Chapter 4: Managing Genres of Work</a></li><li><b>Extension Manager</b></li></ul><p class="purpose">An Inform 7 extension.</p>
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#4">Chapter 4: Genre Management</a></li><li><b>Extension Manager</b></li></ul><p class="purpose">Claiming and creating copies of the extension genre: used for Inform 7 extensions.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP1">§1. Genre definition</a></li><li><a href="#SP5">§5. Claiming</a></li><li><a href="#SP6">§6. Searching</a></li><li><a href="#SP7">§7. Copying</a></li><li><a href="#SP8">§8. Build graph</a></li><li><a href="#SP9">§9. Source text</a></li></ul><hr class="tocbar">
|
||||
|
||||
|
@ -68,6 +68,13 @@ graphs are a single vertex with no build edges, but with use edges to any
|
|||
further extensions which they Include.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">It may seem surprising that we do not provide a <code class="display"><span class="extract">GENRE_CONSTRUCT_GRAPH_MTID</span></code>
|
||||
method. This is for efficiency reasons: we don't want to read and parse the
|
||||
source text of every extension we ever see, and that's what would be needed
|
||||
to make the graphs of every such extension. Instead we build out the graph
|
||||
later on, as needed, just for extensions of interest: see below.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b></p>
|
||||
|
||||
|
||||
|
@ -106,7 +113,7 @@ further extensions which they Include.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function ExtensionManager::path_within_nest is used in <a href="#SP6">§6</a>, <a href="#SP7">§7</a>, 5/ec (<a href="5-ec.html#SP1">§1</a>, <a href="5-ec.html#SP6_7_4_3">§6.7.4.3</a>).</p>
|
||||
<p class="endnote">The function ExtensionManager::path_within_nest is used in <a href="#SP6">§6</a>, <a href="#SP7">§7</a>, 7/ec (<a href="7-ec.html#SP1">§1</a>, <a href="7-ec.html#SP6_7_4_3">§6.7.4.3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>Extension copies are annotated with a structure called an <code class="display"><span class="extract">inform_extension</span></code>,
|
||||
which stores data about extensions used by the Inform compiler.
|
||||
|
@ -148,7 +155,7 @@ which stores data about extensions used by the Inform compiler.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function ExtensionManager::from_copy is used in <a href="#SP8">§8</a>, <a href="#SP9">§9</a>, 5/es (<a href="5-es.html#SP5">§5</a>), 5/ed2 (<a href="5-ed2.html#SP4">§4</a>), 5/ec (<a href="5-ec.html#SP2">§2</a>), 6/st (<a href="6-st.html#SP11">§11</a>), 6/inc (<a href="6-inc.html#SP6_1">§6.1</a>).</p>
|
||||
<p class="endnote">The function ExtensionManager::from_copy is used in <a href="#SP8">§8</a>, <a href="#SP9">§9</a>, 5/es (<a href="5-es.html#SP4">§4</a>), 6/st (<a href="6-st.html#SP11">§11</a>), 6/inc (<a href="6-inc.html#SP6_1">§6.1</a>), 7/ed2 (<a href="7-ed2.html#SP4">§4</a>), 7/ec (<a href="7-ec.html#SP2">§2</a>).</p>
|
||||
|
||||
<p class="endnote">The function ExtensionManager::new_copy is used in <a href="#SP5">§5</a>.</p>
|
||||
|
||||
|
@ -353,7 +360,7 @@ the current VM settings.
|
|||
<p class="endnote">The function ExtensionManager::read_source_text_for is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="4-km.html">Back to 'Kit Manager'</a></li><li><a href="4-lm.html">Continue with 'Language Manager'</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><i>(This section begins Chapter 4: Genre Management.)</i></li><li><a href="4-km.html">Continue with 'Kit Manager'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>3/is4</title>
|
||||
<title>4/em</title>
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
@ -57,7 +57,7 @@
|
|||
<main role="main">
|
||||
|
||||
<!--Weave of '4/km' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#4">Chapter 4: Managing Genres of Work</a></li><li><b>Kit Manager</b></li></ul><p class="purpose">A kit is a combination of Inter code with an Inform 7 extension.</p>
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#4">Chapter 4: Genre Management</a></li><li><b>Kit Manager</b></li></ul><p class="purpose">Claiming and creating copies of the kit genre: used for kits of precompiled Inter code.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP1">§1. Genre definition</a></li><li><a href="#SP4">§4. Claiming</a></li><li><a href="#SP5">§5. Searching</a></li><li><a href="#SP6">§6. Copying</a></li><li><a href="#SP7">§7. Build graph</a></li></ul><hr class="tocbar">
|
||||
|
||||
|
@ -79,7 +79,7 @@ the metadata file.
|
|||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">kit_genre</span><span class="plain">, </span><span class="constant">GENRE_CLAIM_AS_COPY_MTID</span><span class="plain">, </span><span class="functiontext">KitManager::claim_as_copy</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">kit_genre</span><span class="plain">, </span><span class="constant">GENRE_SEARCH_NEST_FOR_MTID</span><span class="plain">, </span><span class="functiontext">KitManager::search_nest_for</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">kit_genre</span><span class="plain">, </span><span class="constant">GENRE_COPY_TO_NEST_MTID</span><span class="plain">, </span><span class="functiontext">KitManager::copy_to_nest</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">kit_genre</span><span class="plain">, </span><span class="constant">GENRE_GO_OPERATIONAL_MTID</span><span class="plain">, </span><span class="functiontext">KitManager::go_operational</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">kit_genre</span><span class="plain">, </span><span class="constant">GENRE_CONSTRUCT_GRAPH_MTID</span><span class="plain">, </span><span class="functiontext">KitManager::construct_graph</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">kit_genre</span><span class="plain">, </span><span class="constant">GENRE_BUILDING_SOON_MTID</span><span class="plain">, </span><span class="functiontext">KitManager::building_soon</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
|
@ -284,7 +284,7 @@ we need to <code class="display"><span class="extract">rsync</span></code> it.
|
|||
<span class="plain">*</span><span class="identifier">V</span><span class="plain"> = </span><span class="identifier">C</span><span class="plain">-</span><span class="element">>vertex</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">KitManager::go_operational</span><span class="plain">(</span><span class="reserved">inbuild_genre</span><span class="plain"> *</span><span class="identifier">G</span><span class="plain">, </span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">KitManager::construct_graph</span><span class="plain">(</span><span class="reserved">inbuild_genre</span><span class="plain"> *</span><span class="identifier">G</span><span class="plain">, </span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Kits::construct_graph</span><span class="plain">(</span><span class="functiontext">KitManager::from_copy</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">));</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
@ -293,10 +293,10 @@ we need to <code class="display"><span class="extract">rsync</span></code> it.
|
|||
|
||||
<p class="endnote">The function KitManager::building_soon is used in <a href="#SP1">§1</a>.</p>
|
||||
|
||||
<p class="endnote">The function KitManager::go_operational is used in <a href="#SP1">§1</a>.</p>
|
||||
<p class="endnote">The function KitManager::construct_graph is used in <a href="#SP1">§1</a>.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><i>(This section begins Chapter 4: Managing Genres of Work.)</i></li><li><a href="4-em.html">Continue with 'Extension Manager'</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="4-em.html">Back to 'Extension Manager'</a></li><li><a href="4-lm.html">Continue with 'Language Manager'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>4/em</title>
|
||||
<title>4/km</title>
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
@ -57,7 +57,7 @@
|
|||
<main role="main">
|
||||
|
||||
<!--Weave of '4/lm' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#4">Chapter 4: Managing Genres of Work</a></li><li><b>Language Manager</b></li></ul><p class="purpose">A language is a combination of Inter code with an Inform 7 extension.</p>
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#4">Chapter 4: Genre Management</a></li><li><b>Language Manager</b></li></ul><p class="purpose">Claiming and creating copies of the language genre: used for bundles of natural language metadata in the Inform 7 compiler.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP1">§1. Genre definition</a></li><li><a href="#SP4">§4. Claiming</a></li><li><a href="#SP5">§5. Searching</a></li><li><a href="#SP6">§6. Copying</a></li></ul><hr class="tocbar">
|
||||
|
||||
|
@ -278,7 +278,7 @@ we need to <code class="display"><span class="extract">rsync</span></code> it.
|
|||
<p class="endnote">The function LanguageManager::copy_to_nest is used in <a href="#SP1">§1</a>.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="4-em.html">Back to 'Extension Manager'</a></li><li><a href="4-pbm.html">Continue with 'Project Bundle Manager'</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="4-km.html">Back to 'Kit Manager'</a></li><li><a href="4-pm.html">Continue with 'Pipeline Manager'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>4/lm</title>
|
||||
<title>4/pm</title>
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
@ -57,7 +57,7 @@
|
|||
<main role="main">
|
||||
|
||||
<!--Weave of '4/pbm' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#4">Chapter 4: Managing Genres of Work</a></li><li><b>Project Bundle Manager</b></li></ul><p class="purpose">A project bundle is a folder holding an Inform 7 work. The app creates these.</p>
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#4">Chapter 4: Genre Management</a></li><li><b>Project Bundle Manager</b></li></ul><p class="purpose">Claiming and creating copies of the projectbundle genre: used for Inform 7 projects as created by the GUI apps.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP1">§1. Genre definition</a></li><li><a href="#SP3">§3. Claiming</a></li><li><a href="#SP4">§4. Searching</a></li><li><a href="#SP5">§5. Copying</a></li><li><a href="#SP6">§6. Build graph</a></li><li><a href="#SP7">§7. Source text</a></li></ul><hr class="tocbar">
|
||||
|
||||
|
@ -84,7 +84,7 @@ However it is stored in the file system, a project is a project.
|
|||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">project_bundle_genre</span><span class="plain">, </span><span class="constant">GENRE_CLAIM_AS_COPY_MTID</span><span class="plain">, </span><span class="functiontext">ProjectBundleManager::claim_as_copy</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">project_bundle_genre</span><span class="plain">, </span><span class="constant">GENRE_SEARCH_NEST_FOR_MTID</span><span class="plain">, </span><span class="functiontext">ProjectBundleManager::search_nest_for</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">project_bundle_genre</span><span class="plain">, </span><span class="constant">GENRE_COPY_TO_NEST_MTID</span><span class="plain">, </span><span class="functiontext">ProjectBundleManager::copy_to_nest</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">project_bundle_genre</span><span class="plain">, </span><span class="constant">GENRE_GO_OPERATIONAL_MTID</span><span class="plain">, </span><span class="functiontext">ProjectBundleManager::go_operational</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">project_bundle_genre</span><span class="plain">, </span><span class="constant">GENRE_CONSTRUCT_GRAPH_MTID</span><span class="plain">, </span><span class="functiontext">ProjectBundleManager::construct_graph</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">project_bundle_genre</span><span class="plain">, </span><span class="constant">GENRE_READ_SOURCE_TEXT_FOR_MTID</span><span class="plain">, </span><span class="functiontext">ProjectBundleManager::read_source_text_for</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">project_bundle_genre</span><span class="plain">, </span><span class="constant">GENRE_BUILDING_SOON_MTID</span><span class="plain">, </span><span class="functiontext">ProjectBundleManager::building_soon</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -204,7 +204,7 @@ projects lived there.
|
|||
<span class="plain">*</span><span class="identifier">V</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>chosen_build_target</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ProjectBundleManager::go_operational</span><span class="plain">(</span><span class="reserved">inbuild_genre</span><span class="plain"> *</span><span class="identifier">G</span><span class="plain">, </span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ProjectBundleManager::construct_graph</span><span class="plain">(</span><span class="reserved">inbuild_genre</span><span class="plain"> *</span><span class="identifier">G</span><span class="plain">, </span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Projects::construct_graph</span><span class="plain">(</span><span class="functiontext">ProjectBundleManager::from_copy</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">));</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
@ -213,7 +213,7 @@ projects lived there.
|
|||
|
||||
<p class="endnote">The function ProjectBundleManager::building_soon is used in <a href="#SP1">§1</a>.</p>
|
||||
|
||||
<p class="endnote">The function ProjectBundleManager::go_operational is used in <a href="#SP1">§1</a>.</p>
|
||||
<p class="endnote">The function ProjectBundleManager::construct_graph is used in <a href="#SP1">§1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. Source text. </b></p>
|
||||
|
||||
|
@ -229,7 +229,7 @@ projects lived there.
|
|||
<p class="endnote">The function ProjectBundleManager::read_source_text_for is used in <a href="#SP1">§1</a>.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="4-lm.html">Back to 'Language Manager'</a></li><li><a href="4-pfm.html">Continue with 'Project File Manager'</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="4-pm.html">Back to 'Pipeline Manager'</a></li><li><a href="4-pfm.html">Continue with 'Project File Manager'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
<main role="main">
|
||||
|
||||
<!--Weave of '4/pfm' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#4">Chapter 4: Managing Genres of Work</a></li><li><b>Project File Manager</b></li></ul><p class="purpose">A project file is a plain text file of Inform 7 source text.</p>
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#4">Chapter 4: Genre Management</a></li><li><b>Project File Manager</b></li></ul><p class="purpose">Claiming and creating copies of the projectfile genre: used for Inform 7 source texts stored as stand-alone plain text files, outside the GUI apps.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP1">§1. Genre definition</a></li><li><a href="#SP3">§3. Claiming</a></li><li><a href="#SP4">§4. Searching</a></li><li><a href="#SP5">§5. Copying</a></li><li><a href="#SP6">§6. Build graph</a></li><li><a href="#SP7">§7. Source text</a></li></ul><hr class="tocbar">
|
||||
|
||||
|
@ -82,7 +82,7 @@ However it is stored in the file system, a project is a project.
|
|||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">project_file_genre</span><span class="plain">, </span><span class="constant">GENRE_CLAIM_AS_COPY_MTID</span><span class="plain">, </span><span class="functiontext">ProjectFileManager::claim_as_copy</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">project_file_genre</span><span class="plain">, </span><span class="constant">GENRE_SEARCH_NEST_FOR_MTID</span><span class="plain">, </span><span class="functiontext">ProjectFileManager::search_nest_for</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">project_file_genre</span><span class="plain">, </span><span class="constant">GENRE_COPY_TO_NEST_MTID</span><span class="plain">, </span><span class="functiontext">ProjectFileManager::copy_to_nest</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">project_file_genre</span><span class="plain">, </span><span class="constant">GENRE_GO_OPERATIONAL_MTID</span><span class="plain">, </span><span class="functiontext">ProjectFileManager::go_operational</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">project_file_genre</span><span class="plain">, </span><span class="constant">GENRE_CONSTRUCT_GRAPH_MTID</span><span class="plain">, </span><span class="functiontext">ProjectFileManager::construct_graph</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">project_file_genre</span><span class="plain">, </span><span class="constant">GENRE_READ_SOURCE_TEXT_FOR_MTID</span><span class="plain">, </span><span class="functiontext">ProjectFileManager::read_source_text_for</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">project_file_genre</span><span class="plain">, </span><span class="constant">GENRE_BUILDING_SOON_MTID</span><span class="plain">, </span><span class="functiontext">ProjectFileManager::building_soon</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -205,7 +205,7 @@ projects lived there.
|
|||
<span class="plain">*</span><span class="identifier">V</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>chosen_build_target</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ProjectFileManager::go_operational</span><span class="plain">(</span><span class="reserved">inbuild_genre</span><span class="plain"> *</span><span class="identifier">G</span><span class="plain">, </span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ProjectFileManager::construct_graph</span><span class="plain">(</span><span class="reserved">inbuild_genre</span><span class="plain"> *</span><span class="identifier">G</span><span class="plain">, </span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Projects::construct_graph</span><span class="plain">(</span><span class="functiontext">ProjectFileManager::from_copy</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">));</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
@ -214,7 +214,7 @@ projects lived there.
|
|||
|
||||
<p class="endnote">The function ProjectFileManager::building_soon is used in <a href="#SP1">§1</a>.</p>
|
||||
|
||||
<p class="endnote">The function ProjectFileManager::go_operational is used in <a href="#SP1">§1</a>.</p>
|
||||
<p class="endnote">The function ProjectFileManager::construct_graph is used in <a href="#SP1">§1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. Source text. </b></p>
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>4/tm</title>
|
||||
<title>4/lm</title>
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
@ -57,7 +57,7 @@
|
|||
<main role="main">
|
||||
|
||||
<!--Weave of '4/pm' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#4">Chapter 4: Managing Genres of Work</a></li><li><b>Pipeline Manager</b></li></ul><p class="purpose">An Inform 7 pipeline.</p>
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#4">Chapter 4: Genre Management</a></li><li><b>Pipeline Manager</b></li></ul><p class="purpose">Claiming and creating copies of the pipeline genre: used for pipelines of code-generation stages.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP1">§1. Genre definition</a></li><li><a href="#SP4">§4. Claiming</a></li><li><a href="#SP5">§5. Searching</a></li><li><a href="#SP6">§6. Copying</a></li></ul><hr class="tocbar">
|
||||
|
||||
|
@ -253,7 +253,7 @@ since a pipeline is a single file; to sync, we just overwrite.
|
|||
<p class="endnote">The function PipelineManager::copy_to_nest is used in <a href="#SP1">§1</a>.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="4-tm.html">Back to 'Template Manager'</a></li><li><i>(This section ends Chapter 4: Managing Genres of Work.)</i></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="4-lm.html">Back to 'Language Manager'</a></li><li><a href="4-pbm.html">Continue with 'Project Bundle Manager'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
<main role="main">
|
||||
|
||||
<!--Weave of '4/tm' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#4">Chapter 4: Managing Genres of Work</a></li><li><b>Template Manager</b></li></ul><p class="purpose">A template is the outline for a website presenting an Inform work.</p>
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#4">Chapter 4: Genre Management</a></li><li><b>Template Manager</b></li></ul><p class="purpose">Claiming and creating copies of the template genre: used for website and interpreter templates when releasing an Inform project.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP1">§1. Genre definition</a></li><li><a href="#SP4">§4. Claiming</a></li><li><a href="#SP5">§5. Searching</a></li><li><a href="#SP6">§6. Copying</a></li></ul><hr class="tocbar">
|
||||
|
||||
|
@ -258,7 +258,7 @@ a folder, we need to <code class="display"><span class="extract">rsync</span></c
|
|||
<p class="endnote">The function TemplateManager::copy_to_nest is used in <a href="#SP1">§1</a>.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="4-pfm.html">Back to 'Project File Manager'</a></li><li><a href="4-pm.html">Continue with 'Pipeline Manager'</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="4-pfm.html">Back to 'Project File Manager'</a></li><li><i>(This section ends Chapter 4: Genre Management.)</i></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>5/kts</title>
|
||||
<title>4/tm</title>
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
@ -57,9 +57,11 @@
|
|||
<main role="main">
|
||||
|
||||
<!--Weave of '5/es' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#5">Chapter 5: Services for the Inform Compiler</a></li><li><b>Extension Services</b></li></ul><p class="purpose">An Inform 7 extension.</p>
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#5">Chapter 5: Genre Services</a></li><li><b>Extension Services</b></li></ul><p class="purpose">Behaviour specific to copies of the extension genre.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. </b>An extension has a title and an author name, each of which is limited in
|
||||
<ul class="toc"><li><a href="#SP1">§1. Scanning metadata</a></li><li><a href="#SP3">§3. Read source text</a></li><li><a href="#SP5">§5. Miscellaneous</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Scanning metadata. </b>An extension has a title and an author name, each of which is limited in
|
||||
length to one character less than the following constants:
|
||||
</p>
|
||||
|
||||
|
@ -86,11 +88,48 @@ length to one character less than the following constants:
|
|||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">inclusion_sentence</span><span class="plain">; </span> <span class="comment">Where the source called for this</span>
|
||||
<span class="identifier">MEMORY_MANAGEMENT</span>
|
||||
<span class="plain">} </span><span class="reserved">inform_extension</span><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure inform_extension is accessed in 1/ic, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/kts, 5/ls, 5/ps, 5/ps2, 5/ts, 6/hdn, 6/inc, 7/ed, 7/ed2 and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>This is called as soon as a new copy <code class="display"><span class="extract">C</span></code> of the extension genre is created.
|
||||
We scan the extension file for the title, author, version number and any
|
||||
compatibility notes given (such as "for Glulx only").
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Extensions::scan</span><span class="plain">(</span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
|
||||
<span class="reserved">inform_extension</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">inform_extension</span><span class="plain">);</span>
|
||||
<span class="identifier">E</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain"> = </span><span class="identifier">C</span><span class="plain">;</span>
|
||||
<span class="functiontext">Copies::set_content</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">STORE_POINTER_inform_extension</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">));</span>
|
||||
<<span class="cwebmacro">Initialise the extension docket</span> <span class="cwebmacronumber">2.1</span>><span class="plain">;</span>
|
||||
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">claimed_author_name</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">claimed_title</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">reqs</span><span class="plain">);</span>
|
||||
<span class="identifier">semantic_version_number</span><span class="plain"> </span><span class="identifier">V</span><span class="plain"> = </span><span class="identifier">VersionNumbers::null</span><span class="plain">();</span>
|
||||
<<span class="cwebmacro">Scan the file</span> <span class="cwebmacronumber">2.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Change the edition of the copy in light of the metadata found in the scan</span> <span class="cwebmacronumber">2.3</span>><span class="plain">;</span>
|
||||
<span class="functiontext">Works::add_to_database</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">, </span><span class="constant">CLAIMED_WDBC</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">claimed_author_name</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">claimed_title</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">reqs</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Extensions::scan is used in 4/em (<a href="4-em.html#SP4">§4</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_1"></a><b>§2.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Initialise the extension docket</span> <span class="cwebmacronumber">2.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">E</span><span class="plain">-</span><span class="element">>body_text</span><span class="plain"> = </span><span class="identifier">EMPTY_WORDING</span><span class="plain">;</span>
|
||||
<span class="identifier">E</span><span class="plain">-</span><span class="element">>body_text_unbroken</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">E</span><span class="plain">-</span><span class="element">>documentation_text</span><span class="plain"> = </span><span class="identifier">EMPTY_WORDING</span><span class="plain">;</span>
|
||||
|
@ -103,66 +142,34 @@ length to one character less than the following constants:
|
|||
<span class="identifier">E</span><span class="plain">-</span><span class="element">>loaded_from_built_in_area</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">E</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain"> = </span><span class="identifier">ParseTree::new_tree</span><span class="plain">();</span>
|
||||
<span class="identifier">E</span><span class="plain">-</span><span class="element">>inclusion_sentence</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">claimed_author_name</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">claimed_title</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">reqs</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">C</span><span class="plain">-</span><span class="element">>location_if_file</span><span class="plain">;</span>
|
||||
<span class="identifier">semantic_version_number</span><span class="plain"> </span><span class="identifier">V</span><span class="plain"> = </span><span class="identifier">VersionNumbers::null</span><span class="plain">();</span>
|
||||
<<span class="cwebmacro">Scan the file</span> <span class="cwebmacronumber">1.1</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">claimed_title</span><span class="plain">) == 0) { </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">claimed_title</span><span class="plain">, </span><span class="string">"Unknown"</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">claimed_author_name</span><span class="plain">) == 0) { </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">claimed_author_name</span><span class="plain">, </span><span class="string">"Anonymous"</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">claimed_title</span><span class="plain">) > </span><span class="constant">MAX_EXTENSION_TITLE_LENGTH</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Copies::attach_error</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="functiontext">CopyErrors::new_N</span><span class="plain">(</span><span class="constant">EXT_TITLE_TOO_LONG_CE</span><span class="plain">, -1, </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">claimed_title</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">claimed_author_name</span><span class="plain">) > </span><span class="constant">MAX_EXTENSION_AUTHOR_LENGTH</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Copies::attach_error</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="functiontext">CopyErrors::new_N</span><span class="plain">(</span><span class="constant">EXT_AUTHOR_TOO_LONG_CE</span><span class="plain">, -1, </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">claimed_author_name</span><span class="plain">)));</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">C</span><span class="plain">-</span><span class="element">>edition</span><span class="plain"> = </span><span class="functiontext">Editions::new</span><span class="plain">(</span><span class="functiontext">Works::new</span><span class="plain">(</span><span class="identifier">extension_genre</span><span class="plain">, </span><span class="identifier">claimed_title</span><span class="plain">, </span><span class="identifier">claimed_author_name</span><span class="plain">), </span><span class="identifier">V</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">reqs</span><span class="plain">) > 0) {</span>
|
||||
<span class="identifier">compatibility_specification</span><span class="plain"> *</span><span class="identifier">CS</span><span class="plain"> = </span><span class="identifier">Compatibility::from_text</span><span class="plain">(</span><span class="identifier">reqs</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">CS</span><span class="plain">) </span><span class="identifier">C</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>compatibility</span><span class="plain"> = </span><span class="identifier">CS</span><span class="plain">;</span>
|
||||
<span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">err</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">err</span><span class="plain">, </span><span class="string">"cannot read compatibility '%S'"</span><span class="plain">, </span><span class="identifier">reqs</span><span class="plain">);</span>
|
||||
<span class="functiontext">Copies::attach_error</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="functiontext">CopyErrors::new_T</span><span class="plain">(</span><span class="constant">EXT_MISWORDED_CE</span><span class="plain">, -1, </span><span class="identifier">err</span><span class="plain">));</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">err</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="functiontext">Works::add_to_database</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">, </span><span class="constant">CLAIMED_WDBC</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">claimed_author_name</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">claimed_title</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">reqs</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Extensions::scan is used in 4/em (<a href="4-em.html#SP4">§4</a>).</p>
|
||||
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="endnote">The structure inform_extension is accessed in 1/ic, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 4/lm, 4/pbm, 4/pfm, 4/tm, 4/pm, 5/kts, 5/ed, 5/ed2, 5/ts, 5/ps, 5/ls, 5/ps2, 6/hdn, 6/inc and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1_1"></a><b>§1.1. </b>The following scans a potential extension file. If it seems malformed, a
|
||||
<p class="inwebparagraph"><a id="SP2_2"></a><b>§2.2. </b>The following scans a potential extension file. If it seems malformed, a
|
||||
suitable error is written to the stream <code class="display"><span class="extract">error_text</span></code>. If not, this is left
|
||||
alone, and the version number is returned.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Scan the file</span> <span class="cwebmacronumber">1.1</span>> =
|
||||
<<span class="cwebmacrodefn">Scan the file</span> <span class="cwebmacronumber">2.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">titling_line</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">version_text</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">C</span><span class="plain">-</span><span class="element">>location_if_file</span><span class="plain">;</span>
|
||||
<span class="reserved">FILE</span><span class="plain"> *</span><span class="identifier">EXTF</span><span class="plain"> = </span><span class="identifier">Filenames::fopen_caseless</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="string">"r"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">EXTF</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Copies::attach_error</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="functiontext">CopyErrors::new_F</span><span class="plain">(</span><span class="constant">OPEN_FAILED_CE</span><span class="plain">, -1, </span><span class="identifier">F</span><span class="plain">));</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<<span class="cwebmacro">Read the titling line of the extension and normalise its casing</span> <span class="cwebmacronumber">1.1.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Read the rubric text, if any is present</span> <span class="cwebmacronumber">1.1.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Parse the version, title, author and VM requirements from the titling line</span> <span class="cwebmacronumber">1.1.3</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Read the titling line of the extension and normalise its casing</span> <span class="cwebmacronumber">2.2.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Read the rubric text, if any is present</span> <span class="cwebmacronumber">2.2.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Parse the version, title, author and VM requirements from the titling line</span> <span class="cwebmacronumber">2.2.3</span>><span class="plain">;</span>
|
||||
<span class="identifier">fclose</span><span class="plain">(</span><span class="identifier">EXTF</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">version_text</span><span class="plain">) > 0) {</span>
|
||||
<span class="identifier">V</span><span class="plain"> = </span><span class="identifier">VersionNumbers::from_text</span><span class="plain">(</span><span class="identifier">version_text</span><span class="plain">);</span>
|
||||
|
@ -180,15 +187,15 @@ alone, and the version number is returned.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP1">§1</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1_1_1"></a><b>§1.1.1. </b>The titling line is terminated by any of <code class="display"><span class="extract">0A</span></code>, <code class="display"><span class="extract">0D</span></code>, <code class="display"><span class="extract">0A 0D</span></code> or <code class="display"><span class="extract">0D 0A</span></code>, or
|
||||
<p class="inwebparagraph"><a id="SP2_2_1"></a><b>§2.2.1. </b>The titling line is terminated by any of <code class="display"><span class="extract">0A</span></code>, <code class="display"><span class="extract">0D</span></code>, <code class="display"><span class="extract">0A 0D</span></code> or <code class="display"><span class="extract">0D 0A</span></code>, or
|
||||
by the local <code class="display"><span class="extract">\n</span></code> for good measure.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Read the titling line of the extension and normalise its casing</span> <span class="cwebmacronumber">1.1.1</span>> =
|
||||
<<span class="cwebmacrodefn">Read the titling line of the extension and normalise its casing</span> <span class="cwebmacronumber">2.2.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -204,9 +211,9 @@ by the local <code class="display"><span class="extract">\n</span></code> for go
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP1_1">§1.1</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP2_2">§2.2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1_1_2"></a><b>§1.1.2. </b>In the following, all possible newlines are converted to white space, and
|
||||
<p class="inwebparagraph"><a id="SP2_2_2"></a><b>§2.2.2. </b>In the following, all possible newlines are converted to white space, and
|
||||
all white space before a quoted rubric text is ignored. We need to do this
|
||||
partly because users have probably keyed a double line break before the
|
||||
rubric, but also because we might have stopped reading the titling line
|
||||
|
@ -216,7 +223,7 @@ thing we read here is a meaningless <code class="display"><span class="extract">
|
|||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Read the rubric text, if any is present</span> <span class="cwebmacronumber">1.1.2</span>> =
|
||||
<<span class="cwebmacrodefn">Read the rubric text, if any is present</span> <span class="cwebmacronumber">2.2.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -236,9 +243,9 @@ thing we read here is a meaningless <code class="display"><span class="extract">
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP1_1">§1.1</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP2_2">§2.2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1_1_3"></a><b>§1.1.3. </b>In general, once case-normalised, a titling line looks like this:
|
||||
<p class="inwebparagraph"><a id="SP2_2_3"></a><b>§2.2.3. </b>In general, once case-normalised, a titling line looks like this:
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
|
@ -254,7 +261,7 @@ load the entire file.
|
|||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Parse the version, title, author and VM requirements from the titling line</span> <span class="cwebmacronumber">1.1.3</span>> =
|
||||
<<span class="cwebmacrodefn">Parse the version, title, author and VM requirements from the titling line</span> <span class="cwebmacronumber">2.2.3</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -272,18 +279,18 @@ load the entire file.
|
|||
<span class="functiontext">Copies::attach_error</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="functiontext">CopyErrors::new_T</span><span class="plain">(</span><span class="constant">EXT_MISWORDED_CE</span><span class="plain">, -1,</span>
|
||||
<span class="identifier">I</span><span class="string">"the opening line does not end 'begin(s) here'"</span><span class="plain">));</span>
|
||||
<span class="plain">}</span>
|
||||
<<span class="cwebmacro">Scan the version text, if any, and advance to the position past Version... Of</span> <span class="cwebmacronumber">1.1.3.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Scan the version text, if any, and advance to the position past Version... Of</span> <span class="cwebmacronumber">2.2.3.1</span>><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">titling_line</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"The (%c*)"</span><span class="plain">)) </span><span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">titling_line</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[0]);</span>
|
||||
<<span class="cwebmacro">Divide the remaining text into a claimed author name and title, divided by By</span> <span class="cwebmacronumber">1.1.3.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Extract the VM requirements text, if any, from the claimed title</span> <span class="cwebmacronumber">1.1.3.3</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Divide the remaining text into a claimed author name and title, divided by By</span> <span class="cwebmacronumber">2.2.3.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Extract the VM requirements text, if any, from the claimed title</span> <span class="cwebmacronumber">2.2.3.3</span>><span class="plain">;</span>
|
||||
<span class="identifier">Regexp::dispose_of</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP1_1">§1.1</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP2_2">§2.2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1_1_3_1"></a><b>§1.1.3.1. </b>We make no attempt to check the version number for validity: the purpose
|
||||
<p class="inwebparagraph"><a id="SP2_2_3_1"></a><b>§2.2.3.1. </b>We make no attempt to check the version number for validity: the purpose
|
||||
of the census is to identify extensions and reject accidentally included
|
||||
other files, not to syntax-check all extensions to see if they would work
|
||||
if used.
|
||||
|
@ -291,7 +298,7 @@ if used.
|
|||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Scan the version text, if any, and advance to the position past Version... Of</span> <span class="cwebmacronumber">1.1.3.1</span>> =
|
||||
<<span class="cwebmacrodefn">Scan the version text, if any, and advance to the position past Version... Of</span> <span class="cwebmacronumber">2.2.3.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -304,16 +311,16 @@ if used.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP1_1_3">§1.1.3</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP2_2_3">§2.2.3</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1_1_3_2"></a><b>§1.1.3.2. </b>The earliest "by" is the divider: note that extension titles are not
|
||||
<p class="inwebparagraph"><a id="SP2_2_3_2"></a><b>§2.2.3.2. </b>The earliest "by" is the divider: note that extension titles are not
|
||||
allowed to contain this word, so "North By Northwest By Cary Grant" is
|
||||
not a situation we need to contend with.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Divide the remaining text into a claimed author name and title, divided by By</span> <span class="cwebmacronumber">1.1.3.2</span>> =
|
||||
<<span class="cwebmacrodefn">Divide the remaining text into a claimed author name and title, divided by By</span> <span class="cwebmacronumber">2.2.3.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -330,15 +337,15 @@ not a situation we need to contend with.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP1_1_3">§1.1.3</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP2_2_3">§2.2.3</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1_1_3_3"></a><b>§1.1.3.3. </b>Similarly, extension titles are not allowed to contain parentheses, so
|
||||
<p class="inwebparagraph"><a id="SP2_2_3_3"></a><b>§2.2.3.3. </b>Similarly, extension titles are not allowed to contain parentheses, so
|
||||
this is unambiguous.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Extract the VM requirements text, if any, from the claimed title</span> <span class="cwebmacronumber">1.1.3.3</span>> =
|
||||
<<span class="cwebmacrodefn">Extract the VM requirements text, if any, from the claimed title</span> <span class="cwebmacronumber">2.2.3.3</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -351,9 +358,197 @@ this is unambiguous.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP1_1_3">§1.1.3</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP2_2_3">§2.2.3</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b></p>
|
||||
<p class="inwebparagraph"><a id="SP2_3"></a><b>§2.3. </b>Note that we don't attempt to modify the <code class="display"><span class="extract">inbuild_work</span></code> structure inside
|
||||
the edition; we create an entirely new <code class="display"><span class="extract">inbuild_work</span></code>. That's because they
|
||||
are immutable, and need to be for the extensions dictionary to work.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Change the edition of the copy in light of the metadata found in the scan</span> <span class="cwebmacronumber">2.3</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">claimed_title</span><span class="plain">) == 0) { </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">claimed_title</span><span class="plain">, </span><span class="string">"Unknown"</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">claimed_author_name</span><span class="plain">) == 0) { </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">claimed_author_name</span><span class="plain">, </span><span class="string">"Anonymous"</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">claimed_title</span><span class="plain">) > </span><span class="constant">MAX_EXTENSION_TITLE_LENGTH</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Copies::attach_error</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="functiontext">CopyErrors::new_N</span><span class="plain">(</span><span class="constant">EXT_TITLE_TOO_LONG_CE</span><span class="plain">, -1, </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">claimed_title</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">claimed_author_name</span><span class="plain">) > </span><span class="constant">MAX_EXTENSION_AUTHOR_LENGTH</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Copies::attach_error</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="functiontext">CopyErrors::new_N</span><span class="plain">(</span><span class="constant">EXT_AUTHOR_TOO_LONG_CE</span><span class="plain">, -1, </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">claimed_author_name</span><span class="plain">)));</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">C</span><span class="plain">-</span><span class="element">>edition</span><span class="plain"> = </span><span class="functiontext">Editions::new</span><span class="plain">(</span><span class="functiontext">Works::new</span><span class="plain">(</span><span class="identifier">extension_genre</span><span class="plain">, </span><span class="identifier">claimed_title</span><span class="plain">, </span><span class="identifier">claimed_author_name</span><span class="plain">), </span><span class="identifier">V</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">reqs</span><span class="plain">) > 0) {</span>
|
||||
<span class="identifier">compatibility_specification</span><span class="plain"> *</span><span class="identifier">CS</span><span class="plain"> = </span><span class="identifier">Compatibility::from_text</span><span class="plain">(</span><span class="identifier">reqs</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">CS</span><span class="plain">) </span><span class="identifier">C</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>compatibility</span><span class="plain"> = </span><span class="identifier">CS</span><span class="plain">;</span>
|
||||
<span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">err</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">err</span><span class="plain">, </span><span class="string">"cannot read compatibility '%S'"</span><span class="plain">, </span><span class="identifier">reqs</span><span class="plain">);</span>
|
||||
<span class="functiontext">Copies::attach_error</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="functiontext">CopyErrors::new_T</span><span class="plain">(</span><span class="constant">EXT_MISWORDED_CE</span><span class="plain">, -1, </span><span class="identifier">err</span><span class="plain">));</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">err</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. Read source text. </b>The scan only skimmed the surface of the file, and didn't try to parse it as
|
||||
natural language text with Preform. But if the extension turns out to be one
|
||||
that we need to use for something, we'll need to read its full text eventually.
|
||||
This is that time.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Extensions::read_source_text_for</span><span class="plain">(</span><span class="reserved">inform_extension</span><span class="plain"> *</span><span class="identifier">E</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">E</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>location_if_file</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">doc_only</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">census_mode</span><span class="plain">) </span><span class="identifier">doc_only</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">synopsis</span><span class="plain">);</span>
|
||||
<<span class="cwebmacro">Concoct a synopsis for the extension to be read</span> <span class="cwebmacronumber">3.1</span>><span class="plain">;</span>
|
||||
<span class="identifier">E</span><span class="plain">-</span><span class="element">>read_into_file</span><span class="plain"> = </span><span class="functiontext">SourceText::read_file</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">synopsis</span><span class="plain">, </span><span class="identifier">doc_only</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">synopsis</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">E</span><span class="plain">-</span><span class="element">>read_into_file</span><span class="plain">) {</span>
|
||||
<span class="identifier">E</span><span class="plain">-</span><span class="element">>read_into_file</span><span class="plain">-></span><span class="identifier">your_ref</span><span class="plain"> = </span><span class="identifier">STORE_POINTER_inbuild_copy</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">);</span>
|
||||
<<span class="cwebmacro">Break the text into sentences</span> <span class="cwebmacronumber">3.2</span>><span class="plain">;</span>
|
||||
<span class="identifier">E</span><span class="plain">-</span><span class="element">>body_text_unbroken</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Extensions::read_source_text_for is used in 4/em (<a href="4-em.html#SP9">§9</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3_1"></a><b>§3.1. </b>We concoct a textual synopsis in the form
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">"Pantomime Sausages by Mr Punch"</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">to be used by <code class="display"><span class="extract">SourceFiles::read_extension_source_text</span></code> for printing to <code class="display"><span class="extract">stdout</span></code>. Since
|
||||
we dare not assume <code class="display"><span class="extract">stdout</span></code> can manage characters outside the basic ASCII
|
||||
range, we flatten them from general ISO to plain ASCII.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Concoct a synopsis for the extension to be read</span> <span class="cwebmacronumber">3.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">synopsis</span><span class="plain">, </span><span class="string">"%S by %S"</span><span class="plain">,</span>
|
||||
<span class="identifier">E</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">-</span><span class="element">>title</span><span class="plain">,</span>
|
||||
<span class="identifier">E</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">-</span><span class="element">>author_name</span><span class="plain">);</span>
|
||||
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">synopsis</span><span class="plain">)</span>
|
||||
<span class="identifier">Str::put</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">,</span>
|
||||
<span class="identifier">Characters::make_filename_safe</span><span class="plain">(</span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">)));</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP3">§3</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3_2"></a><b>§3.2. </b>Note that if there is an active project, then we are reading the extension
|
||||
in order to include it in that, and so we send it to the project's syntax tree,
|
||||
rather than to the extension's own one. But if we are simply examining the
|
||||
extension by running <code class="display"><span class="extract">-graph</span></code> on it in the Inbuild command line, for example,
|
||||
then its sentences will go to the extension's own tree.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Break the text into sentences</span> <span class="cwebmacronumber">3.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">EXW</span><span class="plain"> = </span><span class="identifier">E</span><span class="plain">-</span><span class="element">>read_into_file</span><span class="plain">-></span><span class="identifier">text_read</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::nonempty</span><span class="plain">(</span><span class="identifier">EXW</span><span class="plain">))</span>
|
||||
<<span class="cwebmacro">Break the extension's text into body and documentation</span> <span class="cwebmacronumber">3.2.2</span>><span class="character">;</span>
|
||||
<span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain"> = </span><span class="functiontext">Inbuild::project</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">project</span><span class="plain">) </span><span class="identifier">E</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">;</span>
|
||||
<span class="identifier">Sentences::break_into_extension_copy</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">-</span><span class="element">>body_text</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">);</span>
|
||||
<span class="identifier">E</span><span class="plain">-</span><span class="element">>body_text_unbroken</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP3">§3</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3_2_1"></a><b>§3.2.1. </b>If an extension file contains the special text (outside literal mode) of
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">---- Documentation ----</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">then this is taken as the end of the Inform source, and the beginning of a
|
||||
snippet of documentation about the extension; text from that point on is
|
||||
saved until later, but not broken into sentences for the parse tree, and it
|
||||
is therefore invisible to the rest of Inform. If this division line is not
|
||||
present then the extension contains only body source and no documentation.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain"><</span><span class="identifier">extension</span><span class="plain">-</span><span class="identifier">body</span><span class="plain">> ::=</span>
|
||||
<span class="plain">*** ---- </span><span class="identifier">documentation</span><span class="plain"> ---- ... | ==> </span><span class="identifier">TRUE</span>
|
||||
<span class="plain">... ==> </span><span class="identifier">FALSE</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3_2_2"></a><b>§3.2.2. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Break the extension's text into body and documentation</span> <span class="cwebmacronumber">3.2.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="plain"><</span><span class="identifier">extension</span><span class="plain">-</span><span class="identifier">body</span><span class="plain">>(</span><span class="identifier">EXW</span><span class="plain">);</span>
|
||||
<span class="identifier">E</span><span class="plain">-</span><span class="element">>body_text</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">extension</span><span class="plain">-</span><span class="identifier">body</span><span class="plain">>, 1);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (<<</span><span class="identifier">r</span><span class="plain">>>) </span><span class="identifier">E</span><span class="plain">-</span><span class="element">>documentation_text</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">extension</span><span class="plain">-</span><span class="identifier">body</span><span class="plain">>, 2);</span>
|
||||
<span class="identifier">E</span><span class="plain">-</span><span class="element">>body_text_unbroken</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span> <span class="comment">mark this to be sentence-broken</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP3_2">§3.2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>When the extension source text was read from its <code class="display"><span class="extract">source_file</span></code>, we
|
||||
attached a reference to say which <code class="display"><span class="extract">inform_extension</span></code> it was, and here we
|
||||
make use of that:
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">inform_extension</span><span class="plain"> *</span><span class="functiontext">Extensions::corresponding_to</span><span class="plain">(</span><span class="identifier">source_file</span><span class="plain"> *</span><span class="identifier">sf</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sf</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain"> = </span><span class="identifier">RETRIEVE_POINTER_inbuild_copy</span><span class="plain">(</span><span class="identifier">sf</span><span class="plain">-></span><span class="identifier">your_ref</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">C</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</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">C</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">-</span><span class="element">>genre</span><span class="plain"> != </span><span class="identifier">extension_genre</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">ExtensionManager::from_copy</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Extensions::corresponding_to is used in 6/hdn (<a href="6-hdn.html#SP19">§19</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. Miscellaneous. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
|
@ -379,8 +574,8 @@ this is unambiguous.
|
|||
|
||||
<p class="endnote">The function Extensions::write_author_to_file appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>Three pieces of information (not available when the EF is created) will
|
||||
be set later on, by other parts of Inform calling the routines below.
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b>Three pieces of information will be set later on, by other parts of Inform
|
||||
calling the routines below.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">The rubric text for an extension, which is double-quoted matter just below
|
||||
|
@ -416,11 +611,11 @@ sources, collaborators, translators and so on.
|
|||
|
||||
<p class="endnote">The function Extensions::set_rubric appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Extensions::get_rubric is used in 5/ec (<a href="5-ec.html#SP2">§2</a>).</p>
|
||||
<p class="endnote">The function Extensions::get_rubric is used in 7/ec (<a href="7-ec.html#SP2">§2</a>).</p>
|
||||
|
||||
<p class="endnote">The function Extensions::set_extra_credit appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>The use option "authorial modesty" is unusual in applying to the extension
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. </b>The use option "authorial modesty" is unusual in applying to the extension
|
||||
it is found in, not the whole source text. When we read it, we call one of
|
||||
the following routines, depending on whether it was in an extension or in
|
||||
the main source text:
|
||||
|
@ -433,7 +628,9 @@ the main source text:
|
|||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">E</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unfound ef"</span><span class="plain">);</span>
|
||||
<span class="identifier">E</span><span class="plain">-</span><span class="element">>authorial_modesty</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Extensions::set_general_authorial_modesty</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) { </span><span class="identifier">general_authorial_modesty</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; }</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Extensions::set_general_authorial_modesty</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="identifier">general_authorial_modesty</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Extensions::set_inclusion_sentence</span><span class="plain">(</span><span class="reserved">inform_extension</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain">) {</span>
|
||||
<span class="identifier">E</span><span class="plain">-</span><span class="element">>inclusion_sentence</span><span class="plain"> = </span><span class="identifier">N</span><span class="plain">;</span>
|
||||
|
@ -454,11 +651,7 @@ the main source text:
|
|||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Extensions::must_satisfy</span><span class="plain">(</span><span class="reserved">inform_extension</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain">, </span><span class="reserved">inbuild_requirement</span><span class="plain"> *</span><span class="identifier">req</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">E</span><span class="plain">-</span><span class="element">>must_satisfy</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">E</span><span class="plain">-</span><span class="element">>must_satisfy</span><span class="plain"> = </span><span class="identifier">req</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="identifier">VersionNumberRanges::intersect_range</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">-</span><span class="element">>must_satisfy</span><span class="plain">-</span><span class="element">>version_range</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">-</span><span class="element">>version_range</span><span class="plain">)) {</span>
|
||||
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
|
||||
<span class="functiontext">Extensions::set_inclusion_sentence</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
|
||||
<span class="plain">#</span><span class="identifier">endif</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">VersionNumberRanges::intersect_range</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">-</span><span class="element">>must_satisfy</span><span class="plain">-</span><span class="element">>version_range</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">-</span><span class="element">>version_range</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Extensions::satisfies</span><span class="plain">(</span><span class="reserved">inform_extension</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain">) {</span>
|
||||
|
@ -481,124 +674,12 @@ the main source text:
|
|||
|
||||
<p class="endnote">The function Extensions::make_standard is used in 4/em (<a href="4-em.html#SP4">§4</a>).</p>
|
||||
|
||||
<p class="endnote">The function Extensions::must_satisfy is used in 5/ed2 (<a href="5-ed2.html#SP4">§4</a>), 6/inc (<a href="6-inc.html#SP6">§6</a>).</p>
|
||||
<p class="endnote">The function Extensions::must_satisfy is used in 6/inc (<a href="6-inc.html#SP6">§6</a>), 7/ed2 (<a href="7-ed2.html#SP4">§4</a>).</p>
|
||||
|
||||
<p class="endnote">The function Extensions::satisfies appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Extensions::read_source_text_for</span><span class="plain">(</span><span class="reserved">inform_extension</span><span class="plain"> *</span><span class="identifier">E</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">E</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>location_if_file</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">doc_only</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">census_mode</span><span class="plain">) </span><span class="identifier">doc_only</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">synopsis</span><span class="plain">);</span>
|
||||
<<span class="cwebmacro">Concoct a synopsis for the extension to be read</span> <span class="cwebmacronumber">5.1</span>><span class="plain">;</span>
|
||||
<span class="identifier">E</span><span class="plain">-</span><span class="element">>read_into_file</span><span class="plain"> = </span><span class="functiontext">SourceText::read_file</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">synopsis</span><span class="plain">, </span><span class="identifier">doc_only</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">synopsis</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">E</span><span class="plain">-</span><span class="element">>read_into_file</span><span class="plain">) {</span>
|
||||
<span class="identifier">E</span><span class="plain">-</span><span class="element">>read_into_file</span><span class="plain">-></span><span class="identifier">your_ref</span><span class="plain"> = </span><span class="identifier">STORE_POINTER_inbuild_copy</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">);</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">EXW</span><span class="plain"> = </span><span class="identifier">E</span><span class="plain">-</span><span class="element">>read_into_file</span><span class="plain">-></span><span class="identifier">text_read</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::nonempty</span><span class="plain">(</span><span class="identifier">EXW</span><span class="plain">)) </span><<span class="cwebmacro">Break the extension's text into body and documentation</span> <span class="cwebmacronumber">5.3</span>><span class="character">;</span>
|
||||
<span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain"> = </span><span class="functiontext">Inbuild::project</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">project</span><span class="plain">) </span><span class="identifier">E</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">;</span>
|
||||
<span class="identifier">Sentences::break</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">-</span><span class="element">>body_text</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">, -1);</span>
|
||||
<span class="identifier">E</span><span class="plain">-</span><span class="element">>body_text_unbroken</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">inform_extension</span><span class="plain"> *</span><span class="functiontext">Extensions::corresponding_to</span><span class="plain">(</span><span class="identifier">source_file</span><span class="plain"> *</span><span class="identifier">sf</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sf</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain"> = </span><span class="identifier">RETRIEVE_POINTER_inbuild_copy</span><span class="plain">(</span><span class="identifier">sf</span><span class="plain">-></span><span class="identifier">your_ref</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">C</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</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">C</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">-</span><span class="element">>genre</span><span class="plain"> != </span><span class="identifier">extension_genre</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">ExtensionManager::from_copy</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Extensions::read_source_text_for is used in 4/em (<a href="4-em.html#SP9">§9</a>).</p>
|
||||
|
||||
<p class="endnote">The function Extensions::corresponding_to is used in 6/hdn (<a href="6-hdn.html#SP19">§19</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5_1"></a><b>§5.1. </b>We concoct a textual synopsis in the form
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">"Pantomime Sausages by Mr Punch"</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">to be used by <code class="display"><span class="extract">SourceFiles::read_extension_source_text</span></code> for printing to <code class="display"><span class="extract">stdout</span></code>. Since
|
||||
we dare not assume <code class="display"><span class="extract">stdout</span></code> can manage characters outside the basic ASCII
|
||||
range, we flatten them from general ISO to plain ASCII.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Concoct a synopsis for the extension to be read</span> <span class="cwebmacronumber">5.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">synopsis</span><span class="plain">, </span><span class="string">"%S by %S"</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">-</span><span class="element">>title</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">-</span><span class="element">>author_name</span><span class="plain">);</span>
|
||||
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">synopsis</span><span class="plain">)</span>
|
||||
<span class="identifier">Str::put</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">,</span>
|
||||
<span class="identifier">Characters::make_filename_safe</span><span class="plain">(</span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">)));</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP5">§5</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5_2"></a><b>§5.2. </b>If an extension file contains the special text (outside literal mode) of
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">---- Documentation ----</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">then this is taken as the end of the Inform source, and the beginning of a
|
||||
snippet of documentation about the extension; text from that point on is
|
||||
saved until later, but not broken into sentences for the parse tree, and it
|
||||
is therefore invisible to the rest of Inform. If this division line is not
|
||||
present then the extension contains only body source and no documentation.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain"><</span><span class="identifier">extension</span><span class="plain">-</span><span class="identifier">body</span><span class="plain">> ::=</span>
|
||||
<span class="plain">*** ---- </span><span class="identifier">documentation</span><span class="plain"> ---- ... | ==> </span><span class="identifier">TRUE</span>
|
||||
<span class="plain">... ==> </span><span class="identifier">FALSE</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5_3"></a><b>§5.3. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Break the extension's text into body and documentation</span> <span class="cwebmacronumber">5.3</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="plain"><</span><span class="identifier">extension</span><span class="plain">-</span><span class="identifier">body</span><span class="plain">>(</span><span class="identifier">EXW</span><span class="plain">);</span>
|
||||
<span class="identifier">E</span><span class="plain">-</span><span class="element">>body_text</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">extension</span><span class="plain">-</span><span class="identifier">body</span><span class="plain">>, 1);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (<<</span><span class="identifier">r</span><span class="plain">>>) </span><span class="identifier">E</span><span class="plain">-</span><span class="element">>documentation_text</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">extension</span><span class="plain">-</span><span class="identifier">body</span><span class="plain">>, 2);</span>
|
||||
<span class="identifier">E</span><span class="plain">-</span><span class="element">>body_text_unbroken</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span> <span class="comment">mark this to be sentence-broken</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP5">§5</a>.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="5-kts.html">Back to 'Kits'</a></li><li><a href="5-ed.html">Continue with 'Extension Dictionary'</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><i>(This section begins Chapter 5: Genre Services.)</i></li><li><a href="5-kts.html">Continue with 'Kits'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>4/pm</title>
|
||||
<title>5/es</title>
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
@ -57,7 +57,7 @@
|
|||
<main role="main">
|
||||
|
||||
<!--Weave of '5/kts' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#5">Chapter 5: Services for the Inform Compiler</a></li><li><b>Kits</b></li></ul><p class="purpose">A kit is a combination of Inter code with an Inform 7 extension.</p>
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#5">Chapter 5: Genre Services</a></li><li><b>Kits</b></li></ul><p class="purpose">Behaviour specific to copies of the kit genre.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP1">§1. Genre definition</a></li></ul><hr class="tocbar">
|
||||
|
||||
|
@ -261,23 +261,23 @@
|
|||
|
||||
<p class="endnote">The function Kits::read_metadata appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Kits::load is used in 5/ps (<a href="5-ps.html#SP1">§1</a>).</p>
|
||||
<p class="endnote">The function Kits::load is used in 5/ps2 (<a href="5-ps2.html#SP1">§1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Kits::dependency appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Kits::activation appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Kits::perform_ittt is used in 5/ps (<a href="5-ps.html#SP1_1">§1.1</a>).</p>
|
||||
<p class="endnote">The function Kits::perform_ittt is used in 5/ps2 (<a href="5-ps2.html#SP1_1">§1.1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Kits::load_types is used in 5/ps (<a href="5-ps.html#SP2">§2</a>).</p>
|
||||
<p class="endnote">The function Kits::load_types is used in 5/ps2 (<a href="5-ps2.html#SP2">§2</a>).</p>
|
||||
|
||||
<p class="endnote">The function Kits::activate_plugins is used in 5/ps (<a href="5-ps.html#SP2">§2</a>).</p>
|
||||
<p class="endnote">The function Kits::activate_plugins is used in 5/ps2 (<a href="5-ps2.html#SP2">§2</a>).</p>
|
||||
|
||||
<p class="endnote">The function Kits::early_source_text is used in 5/ps (<a href="5-ps.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function Kits::early_source_text is used in 5/ps2 (<a href="5-ps2.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Kits::inter_paths is used in 3/is (<a href="3-is.html#SP4">§4</a>).</p>
|
||||
|
||||
<p class="endnote">The structure inform_kit is accessed in 1/ic, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 4/lm, 4/pbm, 4/pfm, 4/tm, 4/pm, 5/es, 5/ed, 5/ed2, 5/ts, 5/ps, 5/ls, 5/ps2, 6/hdn, 6/inc and here.</p>
|
||||
<p class="endnote">The structure inform_kit is accessed in 1/ic, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/ls, 5/ps, 5/ps2, 5/ts, 6/hdn, 6/inc, 7/ed, 7/ed2 and here.</p>
|
||||
|
||||
<p class="endnote">The structure inform_kit_ittt is private to this section.</p>
|
||||
|
||||
|
@ -292,7 +292,7 @@ If there are S sections then the graph has S+5 vertices and 4(S+1) edges.
|
|||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Kits::construct_graph</span><span class="plain">(</span><span class="reserved">inform_kit</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
|
||||
<span class="identifier">RUN_ONLY_IN_PHASE</span><span class="plain">(</span><span class="constant">GOING_OPERATIONAL_INBUILD_PHASE</span><span class="plain">)</span>
|
||||
<span class="identifier">RUN_ONLY_IN_PHASE</span><span class="plain">(</span><span class="constant">GRAPH_CONSTRUCTION_INBUILD_PHASE</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain"> = </span><span class="identifier">K</span><span class="plain">-</span><span class="element">>as_copy</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">C</span><span class="plain">-</span><span class="element">>location_if_path</span><span class="plain">;</span>
|
||||
|
@ -371,7 +371,7 @@ If there are S sections then the graph has S+5 vertices and 4(S+1) edges.
|
|||
<p class="endnote">The structure kit_contents_section_state is private to this section.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><i>(This section begins Chapter 5: Services for the Inform Compiler.)</i></li><li><a href="5-es.html">Continue with 'Extension Services'</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="5-es.html">Back to 'Extension Services'</a></li><li><a href="5-ls.html">Continue with 'Language Services'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>5/ps</title>
|
||||
<title>5/kts</title>
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
@ -57,7 +57,7 @@
|
|||
<main role="main">
|
||||
|
||||
<!--Weave of '5/ls' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#5">Chapter 5: Services for the Inform Compiler</a></li><li><b>Language Services</b></li></ul><p class="purpose">An Inform 7 language definition bundle.</p>
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#5">Chapter 5: Genre Services</a></li><li><b>Language Services</b></li></ul><p class="purpose">Behaviour specific to copies of the language genre.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP3">§3. Logging</a></li><li><a href="#SP4">§4. Language code</a></li><li><a href="#SP5">§5. Kit</a></li><li><a href="#SP6">§6. Finding by name</a></li><li><a href="#SP7">§7. English</a></li></ul><hr class="tocbar">
|
||||
|
||||
|
@ -112,7 +112,7 @@ of the following structure.
|
|||
|
||||
<p class="endnote">The function Languages::path_to_bundle appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The structure inform_language is accessed in 1/ic, 2/edt, 2/rqr, 2/nst, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 4/lm, 4/pbm, 4/pfm, 4/tm, 4/pm, 5/kts, 5/es, 5/ed, 5/ed2, 5/ec, 5/ts, 5/ps, 5/ps2, 6/hdn, 6/inc, 6/vmg and here.</p>
|
||||
<p class="endnote">The structure inform_language is accessed in 1/ic, 2/edt, 2/rqr, 2/nst, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/kts, 5/ps, 5/ps2, 5/ts, 6/hdn, 6/inc, 6/vmg, 7/ed, 7/ed2, 7/ec and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1_1"></a><b>§1.1. </b>Within the bundle folder is a file called <code class="display"><span class="extract">about.txt</span></code>, which sets numbered
|
||||
fields to excerpts of text. The following are the field numbers:
|
||||
|
@ -235,7 +235,7 @@ detect the language of play for a story file without actually running it.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Languages::kit_name is used in 5/ps (<a href="5-ps.html#SP1">§1</a>).</p>
|
||||
<p class="endnote">The function Languages::kit_name is used in 5/ps2 (<a href="5-ps2.html#SP1">§1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. Finding by name. </b>Given the name of a natural language (e.g., "German") we find the
|
||||
corresponding structure, if it exists. We perform this check case
|
||||
|
@ -278,10 +278,10 @@ insensitively.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Languages::internal_English is used in 1/ic (<a href="1-ic.html#SP9_2">§9.2</a>), 5/ps (<a href="5-ps.html#SP1">§1</a>).</p>
|
||||
<p class="endnote">The function Languages::internal_English is used in 1/ic (<a href="1-ic.html#SP9_2">§9.2</a>), 5/ps2 (<a href="5-ps2.html#SP1">§1</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="5-ps.html">Back to 'Project Services'</a></li><li><a href="5-ps2.html">Continue with 'Pipeline Services'</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="5-kts.html">Back to 'Kits'</a></li><li><a href="5-ps.html">Continue with 'Pipeline Services'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>5/ts</title>
|
||||
<title>5/ls</title>
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
@ -57,681 +57,34 @@
|
|||
<main role="main">
|
||||
|
||||
<!--Weave of '5/ps' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#5">Chapter 5: Services for the Inform Compiler</a></li><li><b>Project Services</b></li></ul><p class="purpose">An Inform 7 project.</p>
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#5">Chapter 5: Genre Services</a></li><li><b>Pipeline Services</b></li></ul><p class="purpose">Behaviour specific to copies of the pipeline genre.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. </b></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">kit_dependency</span><span class="plain"> {</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inform_kit</span><span class="plain"> *</span><span class="identifier">kit</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">because_of_language</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inform_kit</span><span class="plain"> *</span><span class="identifier">because_of_kit</span><span class="plain">;</span>
|
||||
<span class="identifier">MEMORY_MANAGEMENT</span>
|
||||
<span class="plain">} </span><span class="reserved">kit_dependency</span><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inform_project</span><span class="plain"> {</span>
|
||||
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inform_pipeline</span><span class="plain"> {</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">as_copy</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">semantic_version_number</span><span class="plain"> </span><span class="identifier">version</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">source_vertices</span><span class="plain">; </span> <span class="comment">of <code class="display"><span class="extract">build_vertex</span></code></span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">assumed_to_be_parser_IF</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">kits_to_include</span><span class="plain">; </span> <span class="comment">of <code class="display"><span class="extract">kit_dependency</span></code></span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">language_of_play</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">language_of_syntax</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">language_of_index</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">unblorbed_vertex</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">blorbed_vertex</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">chosen_build_target</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">parse_node_tree</span><span class="plain"> *</span><span class="identifier">syntax_tree</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">fix_rng</span><span class="plain">;</span>
|
||||
<span class="identifier">MEMORY_MANAGEMENT</span>
|
||||
<span class="plain">} </span><span class="reserved">inform_project</span><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">inform_pipeline</span><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">inform_project</span><span class="plain"> *</span><span class="functiontext">Projects::new_ip</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</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">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
|
||||
<span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain">);</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>version</span><span class="plain"> = </span><span class="identifier">VersionNumbers::null</span><span class="plain">();</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>source_vertices</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="reserved">build_vertex</span><span class="plain">);</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="reserved">kit_dependency</span><span class="plain">);</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>assumed_to_be_parser_IF</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>language_of_play</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>language_of_syntax</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>language_of_index</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>chosen_build_target</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>unblorbed_vertex</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>blorbed_vertex</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>fix_rng</span><span class="plain"> = 0;</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain"> = </span><span class="identifier">ParseTree::new_tree</span><span class="plain">();</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">project</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::set_to_English</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">proj</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">proj</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no project"</span><span class="plain">);</span>
|
||||
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Languages::internal_English</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">E</span><span class="plain">) {</span>
|
||||
<span class="identifier">proj</span><span class="plain">-</span><span class="element">>language_of_play</span><span class="plain"> = </span><span class="identifier">E</span><span class="plain">;</span>
|
||||
<span class="identifier">proj</span><span class="plain">-</span><span class="element">>language_of_syntax</span><span class="plain"> = </span><span class="identifier">E</span><span class="plain">;</span>
|
||||
<span class="identifier">proj</span><span class="plain">-</span><span class="element">>language_of_index</span><span class="plain"> = </span><span class="identifier">E</span><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"built-in English language definition can't be found'"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::set_language_of_play</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">proj</span><span class="plain">, </span><span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">proj</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no project"</span><span class="plain">);</span>
|
||||
<span class="identifier">proj</span><span class="plain">-</span><span class="element">>language_of_play</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="functiontext">Projects::get_language_of_play</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">proj</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">proj</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">proj</span><span class="plain">-</span><span class="element">>language_of_play</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::set_language_of_index</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">proj</span><span class="plain">, </span><span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">proj</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no project"</span><span class="plain">);</span>
|
||||
<span class="identifier">proj</span><span class="plain">-</span><span class="element">>language_of_index</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="functiontext">Projects::get_language_of_index</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">proj</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">proj</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">proj</span><span class="plain">-</span><span class="element">>language_of_index</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::set_language_of_syntax</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">proj</span><span class="plain">, </span><span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">proj</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no project"</span><span class="plain">);</span>
|
||||
<span class="identifier">proj</span><span class="plain">-</span><span class="element">>language_of_syntax</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="functiontext">Projects::get_language_of_syntax</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">proj</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">proj</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">proj</span><span class="plain">-</span><span class="element">>language_of_syntax</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::fix_rng</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">seed</span><span class="plain">) {</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>fix_rng</span><span class="plain"> = </span><span class="identifier">seed</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::not_necessarily_parser_IF</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>assumed_to_be_parser_IF</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::set_source_filename</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</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">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">) {</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">manifest</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.txt"</span><span class="plain">);</span>
|
||||
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">L</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">manifest</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">Projects::manifest_helper</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">L</span><span class="plain">);</span>
|
||||
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">leafname</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">leafname</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">) {</span>
|
||||
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="functiontext">Graphs::file_vertex</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">leafname</span><span class="plain">));</span>
|
||||
<span class="identifier">S</span><span class="plain">-</span><span class="element">>source_source</span><span class="plain"> = </span><span class="identifier">leafname</span><span class="plain">;</span>
|
||||
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">build_vertex</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>source_vertices</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">LinkedLists::len</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>source_vertices</span><span class="plain">) == 0) && (</span><span class="identifier">F</span><span class="plain">)) {</span>
|
||||
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="functiontext">Graphs::file_vertex</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">);</span>
|
||||
<span class="identifier">S</span><span class="plain">-</span><span class="element">>source_source</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"your source text"</span><span class="plain">;</span>
|
||||
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">build_vertex</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>source_vertices</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::manifest_helper</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">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="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = (</span><span class="identifier">linked_list</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
|
||||
<span class="identifier">Str::trim_white_space</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">);</span>
|
||||
<span class="identifier">wchar_t</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_first_char</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> == 0) || (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'#'</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">), </span><span class="identifier">text_stream</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="identifier">pathname</span><span class="plain"> *</span><span class="functiontext">Projects::path</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">project</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>location_if_path</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="functiontext">Projects::source</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">project</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>source_vertices</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::add_kit_dependency</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">kit_name</span><span class="plain">,</span>
|
||||
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">because_of_language</span><span class="plain">, </span><span class="reserved">inform_kit</span><span class="plain"> *</span><span class="identifier">because_of_kit</span><span class="plain">) {</span>
|
||||
<span class="identifier">RUN_ONLY_BEFORE_PHASE</span><span class="plain">(</span><span class="constant">OPERATIONAL_INBUILD_PHASE</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Projects::uses_kit</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">kit_name</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">kit_dependency</span><span class="plain">);</span>
|
||||
<span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain"> = </span><span class="functiontext">Kits::load</span><span class="plain">(</span><span class="identifier">kit_name</span><span class="plain">, </span><span class="functiontext">Inbuild::nest_list</span><span class="plain">());</span>
|
||||
<span class="identifier">kd</span><span class="plain">-</span><span class="element">>because_of_language</span><span class="plain"> = </span><span class="identifier">because_of_language</span><span class="plain">;</span>
|
||||
<span class="identifier">kd</span><span class="plain">-</span><span class="element">>because_of_kit</span><span class="plain"> = </span><span class="identifier">because_of_kit</span><span class="plain">;</span>
|
||||
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Projects::uses_kit</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</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">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">-</span><span class="element">>title</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">))</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::finalise_kit_dependencies</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Projects::add_kit_dependency</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"BasicInformKit"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>language_of_play</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">) {</span>
|
||||
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">kit_name</span><span class="plain"> = </span><span class="functiontext">Languages::kit_name</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">);</span>
|
||||
<span class="functiontext">Projects::add_kit_dependency</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">kit_name</span><span class="plain">, </span><span class="identifier">L</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">project</span><span class="plain">-</span><span class="element">>assumed_to_be_parser_IF</span><span class="plain">)</span>
|
||||
<span class="functiontext">Projects::add_kit_dependency</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"CommandParserKit"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">parity</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Perform if-this-then-that</span> <span class="cwebmacronumber">1.1</span>><span class="plain">;</span>
|
||||
<span class="identifier">parity</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Perform if-this-then-that</span> <span class="cwebmacronumber">1.1</span>><span class="plain">;</span>
|
||||
|
||||
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">sorted</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="reserved">kit_dependency</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">p</span><span class="plain">=0; </span><span class="identifier">p</span><span class="plain"><100; </span><span class="identifier">p</span><span class="plain">++) {</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">-</span><span class="element">>priority</span><span class="plain"> == </span><span class="identifier">p</span><span class="plain">)</span>
|
||||
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">sorted</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain"> = </span><span class="identifier">sorted</span><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">)</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Using Inform kit '%S' (priority %d).\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">-</span><span class="element">>title</span><span class="plain">, </span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">-</span><span class="element">>priority</span><span class="plain">);</span>
|
||||
<span class="reserved">inform_pipeline</span><span class="plain"> *</span><span class="functiontext">Pipelines::new_ip</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</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="reserved">inform_pipeline</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">inform_pipeline</span><span class="plain">);</span>
|
||||
<span class="identifier">T</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">T</span><span class="plain">-</span><span class="element">>version</span><span class="plain"> = </span><span class="identifier">VersionNumbers::null</span><span class="plain">();</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">T</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Projects::new_ip is used in 4/pbm (<a href="4-pbm.html#SP2">§2</a>), 4/pfm (<a href="4-pfm.html#SP2">§2</a>).</p>
|
||||
<p class="endnote">The function Pipelines::new_ip is used in 4/pm (<a href="4-pm.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Projects::set_to_English is used in 1/ic (<a href="1-ic.html#SP9_2">§9.2</a>).</p>
|
||||
|
||||
<p class="endnote">The function Projects::set_language_of_play is used in <a href="#SP6">§6</a>.</p>
|
||||
|
||||
<p class="endnote">The function Projects::get_language_of_play appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Projects::set_language_of_index appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Projects::get_language_of_index appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Projects::set_language_of_syntax appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Projects::get_language_of_syntax is used in 1/ic (<a href="1-ic.html#SP9_2">§9.2</a>).</p>
|
||||
|
||||
<p class="endnote">The function Projects::fix_rng is used in 1/ic (<a href="1-ic.html#SP19">§19</a>).</p>
|
||||
|
||||
<p class="endnote">The function Projects::not_necessarily_parser_IF is used in 1/ic (<a href="1-ic.html#SP22">§22</a>).</p>
|
||||
|
||||
<p class="endnote">The function Projects::set_source_filename is used in 1/ic (<a href="1-ic.html#SP19">§19</a>).</p>
|
||||
|
||||
<p class="endnote">The function Projects::manifest_helper appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Projects::path is used in <a href="#SP3">§3</a>.</p>
|
||||
|
||||
<p class="endnote">The function Projects::source is used in <a href="#SP4">§4</a>, <a href="#SP7">§7</a>.</p>
|
||||
|
||||
<p class="endnote">The function Projects::add_kit_dependency is used in 1/ic (<a href="1-ic.html#SP22">§22</a>), 5/kts (<a href="5-kts.html#SP1">§1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Projects::uses_kit is used in 5/kts (<a href="5-kts.html#SP1">§1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Projects::finalise_kit_dependencies is used in <a href="#SP4">§4</a>.</p>
|
||||
|
||||
<p class="endnote">The structure kit_dependency is accessed in 3/is2 and here.</p>
|
||||
|
||||
<p class="endnote">The structure inform_project is accessed in 1/ic, 2/edt, 2/rqr, 2/nst, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 4/lm, 4/pbm, 4/pfm, 4/tm, 4/pm, 5/kts, 5/es, 5/ed, 5/ed2, 5/ec, 5/ts, 5/ls, 5/ps2, 6/hdn, 6/inc, 6/vmg and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1_1"></a><b>§1.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Perform if-this-then-that</span> <span class="cwebmacronumber">1.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">changes_made</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">changes_made</span><span class="plain">) {</span>
|
||||
<span class="identifier">changes_made</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Kits::perform_ittt</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">parity</span><span class="plain">))</span>
|
||||
<span class="identifier">changes_made</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP1">§1</a> (twice).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::load_types</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">)</span>
|
||||
<span class="functiontext">Kits::load_types</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">#</span><span class="identifier">endif</span>
|
||||
|
||||
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::activate_plugins</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Activate plugins...\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||||
<span class="identifier">Plugins::Manage::activate</span><span class="plain">(</span><span class="identifier">CORE_PLUGIN_NAME</span><span class="plain">);</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">)</span>
|
||||
<span class="functiontext">Kits::activate_plugins</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">);</span>
|
||||
<span class="identifier">Plugins::Manage::show</span><span class="plain">(</span><span class="identifier">DL</span><span class="plain">, </span><span class="string">"Included"</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="identifier">Plugins::Manage::show</span><span class="plain">(</span><span class="identifier">DL</span><span class="plain">, </span><span class="string">"Excluded"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">#</span><span class="identifier">endif</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Projects::Main_defined</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">-</span><span class="element">>defines_Main</span><span class="plain">)</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">Projects::index_template</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">-</span><span class="element">>index_template</span><span class="plain">)</span>
|
||||
<span class="identifier">I</span><span class="plain"> = </span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">-</span><span class="element">>index_template</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Projects::load_types appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Projects::activate_plugins is used in <a href="#SP4">§4</a>.</p>
|
||||
|
||||
<p class="endnote">The function Projects::Main_defined appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Projects::index_template appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>Every source text read into Inform is automatically prefixed by a few words
|
||||
loading the fundamental "extensions" — text such as "Include Basic Inform by
|
||||
Graham Nelson." If Inform were a computer, this would be the BIOS which boots
|
||||
up its operating system. Each kit can contribute such extensions, so there
|
||||
may be multiple sentences, which we need to count up.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::early_source_text</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">)</span>
|
||||
<span class="functiontext">Kits::early_source_text</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CODEGEN_MODULE</span>
|
||||
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="functiontext">Projects::list_of_inter_libraries</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">requirements_list</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="identifier">link_instruction</span><span class="plain">);</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">) {</span>
|
||||
<span class="reserved">inform_kit</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain"> = </span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">;</span>
|
||||
<span class="identifier">link_instruction</span><span class="plain"> *</span><span class="identifier">link</span><span class="plain"> = </span><span class="identifier">CodeGen::LinkInstructions::new</span><span class="plain">(</span>
|
||||
<span class="identifier">K</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>location_if_path</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">-</span><span class="element">>attachment_point</span><span class="plain">);</span>
|
||||
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">link</span><span class="plain">, </span><span class="identifier">link_instruction</span><span class="plain">, </span><span class="identifier">requirements_list</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">requirements_list</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">#</span><span class="identifier">endif</span>
|
||||
|
||||
<span class="identifier">pathname</span><span class="plain"> *</span><span class="functiontext">Projects::build_pathname</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</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="functiontext">Projects::path</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Build"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inbuild::transient</span><span class="plain">();</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::construct_build_target</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">target_vm</span><span class="plain"> *</span><span class="identifier">VM</span><span class="plain">,</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">releasing</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">compile_only</span><span class="plain">) {</span>
|
||||
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">build_folder</span><span class="plain"> = </span><span class="functiontext">Projects::build_pathname</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">);</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">inf_F</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">build_folder</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"auto.inf"</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">inter_V</span><span class="plain"> = </span><span class="functiontext">Graphs::file_vertex</span><span class="plain">(</span><span class="identifier">inf_F</span><span class="plain">);</span>
|
||||
<span class="functiontext">Graphs::need_this_to_build</span><span class="plain">(</span><span class="identifier">inter_V</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>vertex</span><span class="plain">);</span>
|
||||
<span class="functiontext">BuildSteps::attach</span><span class="plain">(</span><span class="identifier">inter_V</span><span class="plain">, </span><span class="identifier">compile_using_inform7_skill</span><span class="plain">,</span>
|
||||
<span class="functiontext">Inbuild::nest_list</span><span class="plain">(), </span><span class="identifier">releasing</span><span class="plain">, </span><span class="identifier">VM</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">inf_V</span><span class="plain"> = </span><span class="functiontext">Graphs::file_vertex</span><span class="plain">(</span><span class="identifier">inf_F</span><span class="plain">);</span>
|
||||
<span class="functiontext">Graphs::need_this_to_build</span><span class="plain">(</span><span class="identifier">inf_V</span><span class="plain">, </span><span class="identifier">inter_V</span><span class="plain">);</span>
|
||||
<span class="functiontext">BuildSteps::attach</span><span class="plain">(</span><span class="identifier">inf_V</span><span class="plain">, </span><span class="identifier">code_generate_using_inter_skill</span><span class="plain">,</span>
|
||||
<span class="functiontext">Inbuild::nest_list</span><span class="plain">(), </span><span class="identifier">releasing</span><span class="plain">, </span><span class="identifier">VM</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">story_file_leafname</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">story_file_leafname</span><span class="plain">, </span><span class="string">"output.%S"</span><span class="plain">, </span><span class="identifier">TargetVMs::get_unblorbed_extension</span><span class="plain">(</span><span class="identifier">VM</span><span class="plain">));</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">unblorbed_F</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">build_folder</span><span class="plain">, </span><span class="identifier">story_file_leafname</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">story_file_leafname</span><span class="plain">);</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>unblorbed_vertex</span><span class="plain"> = </span><span class="functiontext">Graphs::file_vertex</span><span class="plain">(</span><span class="identifier">unblorbed_F</span><span class="plain">);</span>
|
||||
<span class="functiontext">Graphs::need_this_to_build</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>unblorbed_vertex</span><span class="plain">, </span><span class="identifier">inf_V</span><span class="plain">);</span>
|
||||
<span class="functiontext">BuildSteps::attach</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>unblorbed_vertex</span><span class="plain">, </span><span class="identifier">compile_using_inform6_skill</span><span class="plain">,</span>
|
||||
<span class="functiontext">Inbuild::nest_list</span><span class="plain">(), </span><span class="identifier">releasing</span><span class="plain">, </span><span class="identifier">VM</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">story_file_leafname2</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">story_file_leafname2</span><span class="plain">, </span><span class="string">"output.%S"</span><span class="plain">, </span><span class="identifier">TargetVMs::get_blorbed_extension</span><span class="plain">(</span><span class="identifier">VM</span><span class="plain">));</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">blorbed_F</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">build_folder</span><span class="plain">, </span><span class="identifier">story_file_leafname2</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">story_file_leafname2</span><span class="plain">);</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>blorbed_vertex</span><span class="plain"> = </span><span class="functiontext">Graphs::file_vertex</span><span class="plain">(</span><span class="identifier">blorbed_F</span><span class="plain">);</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>blorbed_vertex</span><span class="plain">-</span><span class="element">>always_build_this</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="functiontext">Graphs::need_this_to_build</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>blorbed_vertex</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>unblorbed_vertex</span><span class="plain">);</span>
|
||||
<span class="functiontext">BuildSteps::attach</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>blorbed_vertex</span><span class="plain">, </span><span class="identifier">package_using_inblorb_skill</span><span class="plain">,</span>
|
||||
<span class="functiontext">Inbuild::nest_list</span><span class="plain">(), </span><span class="identifier">releasing</span><span class="plain">, </span><span class="identifier">VM</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">compile_only</span><span class="plain">) {</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>chosen_build_target</span><span class="plain"> = </span><span class="identifier">inf_V</span><span class="plain">;</span>
|
||||
<span class="identifier">inf_V</span><span class="plain">-</span><span class="element">>always_build_this</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="reserved">if</span><span class="plain"> (</span><span class="identifier">releasing</span><span class="plain">) </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>chosen_build_target</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>blorbed_vertex</span><span class="plain">;</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>chosen_build_target</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>unblorbed_vertex</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::graph_dependent_kit</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">, </span><span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">use</span><span class="plain">) {</span>
|
||||
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">KV</span><span class="plain"> = </span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>vertex</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">use</span><span class="plain">) </span><span class="functiontext">Graphs::need_this_to_use</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">KV</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">Graphs::need_this_to_build</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">KV</span><span class="plain">);</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd2</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd2</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">kd2</span><span class="plain">-</span><span class="element">>because_of_kit</span><span class="plain"> == </span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">) && (</span><span class="identifier">kd2</span><span class="plain">-</span><span class="element">>because_of_language</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">))</span>
|
||||
<span class="functiontext">Projects::graph_dependent_kit</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">KV</span><span class="plain">, </span><span class="identifier">kd2</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::graph_dependent_language</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">, </span><span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain">, </span><span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">use</span><span class="plain">) {</span>
|
||||
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">LV</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>vertex</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">use</span><span class="plain">) </span><span class="functiontext">Graphs::need_this_to_use</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">LV</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">Graphs::need_this_to_build</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">LV</span><span class="plain">);</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd2</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd2</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">kd2</span><span class="plain">-</span><span class="element">>because_of_kit</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) && (</span><span class="identifier">kd2</span><span class="plain">-</span><span class="element">>because_of_language</span><span class="plain"> == </span><span class="identifier">L</span><span class="plain">))</span>
|
||||
<span class="functiontext">Projects::graph_dependent_kit</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">LV</span><span class="plain">, </span><span class="identifier">kd2</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::construct_graph</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="identifier">RUN_ONLY_IN_PHASE</span><span class="plain">(</span><span class="constant">GOING_OPERATIONAL_INBUILD_PHASE</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">project</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>vertex</span><span class="plain">;</span>
|
||||
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">build_vertex</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>source_vertices</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Graphs::need_this_to_build</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>because_of_kit</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) && (</span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>because_of_language</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">))</span>
|
||||
<span class="functiontext">Projects::graph_dependent_kit</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">kd</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>language_of_play</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">) </span><span class="functiontext">Projects::graph_dependent_language</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="identifier">L</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>language_of_syntax</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">) </span><span class="functiontext">Projects::graph_dependent_language</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="identifier">L</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>language_of_index</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">) </span><span class="functiontext">Projects::graph_dependent_language</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Projects::early_source_text is used in <a href="#SP4">§4</a>.</p>
|
||||
|
||||
<p class="endnote">The function Projects::list_of_inter_libraries is used in 3/is (<a href="3-is.html#SP4">§4</a>).</p>
|
||||
|
||||
<p class="endnote">The function Projects::build_pathname appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Projects::construct_build_target is used in 1/ic (<a href="1-ic.html#SP9">§9</a>).</p>
|
||||
|
||||
<p class="endnote">The function Projects::graph_dependent_kit appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Projects::graph_dependent_language appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Projects::construct_graph is used in 4/pbm (<a href="4-pbm.html#SP6">§6</a>), 4/pfm (<a href="4-pfm.html#SP6">§6</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b></p>
|
||||
|
||||
|
||||
<pre class="definitions">
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">BadTitleSentence_SYNERROR</span>
|
||||
</pre>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::read_source_text_for</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Projects::finalise_kit_dependencies</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">inclusions_heading</span><span class="plain"> = </span><span class="identifier">ParseTree::new</span><span class="plain">(</span><span class="identifier">HEADING_NT</span><span class="plain">);</span>
|
||||
<span class="identifier">ParseTree::set_text</span><span class="plain">(</span><span class="identifier">inclusions_heading</span><span class="plain">,</span>
|
||||
<span class="identifier">Feeds::feed_text_expanding_strings</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"Implied inclusions"</span><span class="plain">));</span>
|
||||
<span class="identifier">ParseTree::insert_sentence</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">inclusions_heading</span><span class="plain">);</span>
|
||||
<span class="identifier">ParseTree::annotate_int</span><span class="plain">(</span><span class="identifier">inclusions_heading</span><span class="plain">, </span><span class="identifier">sentence_unparsed_ANNOT</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="identifier">ParseTree::annotate_int</span><span class="plain">(</span><span class="identifier">inclusions_heading</span><span class="plain">, </span><span class="identifier">heading_level_ANNOT</span><span class="plain">, 0);</span>
|
||||
<span class="identifier">ParseTree::annotate_int</span><span class="plain">(</span><span class="identifier">inclusions_heading</span><span class="plain">, </span><span class="identifier">implied_heading_ANNOT</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="functiontext">Headings::declare</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">inclusions_heading</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">wc</span><span class="plain"> = </span><span class="identifier">lexer_wordcount</span><span class="plain">, </span><span class="identifier">bwc</span><span class="plain"> = -1;</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">early</span><span class="plain">);</span>
|
||||
<span class="functiontext">Projects::early_source_text</span><span class="plain">(</span><span class="identifier">early</span><span class="plain">, </span><span class="identifier">project</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">early</span><span class="plain">) > 0) </span><span class="identifier">Feeds::feed_stream</span><span class="plain">(</span><span class="identifier">early</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">early</span><span class="plain">);</span>
|
||||
<span class="reserved">inbuild_nest</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inbuild::external</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">E</span><span class="plain">) </span><span class="functiontext">Projects::read_further_mandatory_text</span><span class="plain">(</span>
|
||||
<span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">-</span><span class="element">>location</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Options.txt"</span><span class="plain">));</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">early_W</span><span class="plain"> = </span><span class="identifier">Wordings::new</span><span class="plain">(</span><span class="identifier">wc</span><span class="plain">, </span><span class="identifier">lexer_wordcount</span><span class="plain">-1);</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">l</span><span class="plain"> = </span><span class="identifier">ParseTree::push_attachment_point</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">inclusions_heading</span><span class="plain">);</span>
|
||||
<span class="identifier">Sentences::break</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">early_W</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">, </span><span class="identifier">bwc</span><span class="plain">);</span>
|
||||
<span class="identifier">ParseTree::pop_attachment_point</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">l</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">wc</span><span class="plain"> = </span><span class="identifier">lexer_wordcount</span><span class="plain">;</span>
|
||||
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = </span><span class="functiontext">Projects::source</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">) {</span>
|
||||
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">, </span><span class="reserved">build_vertex</span><span class="plain">, </span><span class="identifier">L</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">N</span><span class="plain">-</span><span class="element">>as_file</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bwc</span><span class="plain"> == -1) </span><span class="identifier">bwc</span><span class="plain"> = </span><span class="identifier">lexer_wordcount</span><span class="plain">;</span>
|
||||
<span class="identifier">N</span><span class="plain">-</span><span class="element">>as_source_file</span><span class="plain"> = </span><span class="functiontext">SourceText::read_file</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">-</span><span class="element">>source_source</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="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">l</span><span class="plain"> = </span><span class="identifier">ParseTree::push_attachment_point</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">-></span><span class="identifier">root_node</span><span class="plain">);</span>
|
||||
<span class="identifier">Sentences::break</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">Wordings::new</span><span class="plain">(</span><span class="identifier">wc</span><span class="plain">, </span><span class="identifier">lexer_wordcount</span><span class="plain">-1), </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">, </span><span class="identifier">bwc</span><span class="plain">);</span>
|
||||
<span class="identifier">ParseTree::pop_attachment_point</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">l</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">l</span><span class="plain"> = </span><span class="identifier">ParseTree::push_attachment_point</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">-></span><span class="identifier">root_node</span><span class="plain">);</span>
|
||||
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">implicit_heading</span><span class="plain"> = </span><span class="identifier">ParseTree::new</span><span class="plain">(</span><span class="identifier">HEADING_NT</span><span class="plain">);</span>
|
||||
<span class="identifier">ParseTree::set_text</span><span class="plain">(</span><span class="identifier">implicit_heading</span><span class="plain">, </span><span class="identifier">Feeds::feed_text_expanding_strings</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"Invented sentences"</span><span class="plain">));</span>
|
||||
<span class="identifier">ParseTree::insert_sentence</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">implicit_heading</span><span class="plain">);</span>
|
||||
<span class="identifier">ParseTree::annotate_int</span><span class="plain">(</span><span class="identifier">implicit_heading</span><span class="plain">, </span><span class="identifier">sentence_unparsed_ANNOT</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="identifier">ParseTree::annotate_int</span><span class="plain">(</span><span class="identifier">implicit_heading</span><span class="plain">, </span><span class="identifier">heading_level_ANNOT</span><span class="plain">, 0);</span>
|
||||
<span class="functiontext">Headings::declare</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">implicit_heading</span><span class="plain">);</span>
|
||||
<span class="identifier">ParseTree::pop_attachment_point</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">l</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">ParseTree::push_attachment_point</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">implicit_heading</span><span class="plain">);</span>
|
||||
|
||||
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
|
||||
<span class="functiontext">Projects::activate_plugins</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">);</span>
|
||||
<span class="plain">#</span><span class="identifier">endif</span>
|
||||
<span class="functiontext">Inclusions::traverse</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">);</span>
|
||||
<span class="functiontext">Headings::satisfy_dependencies</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">);</span>
|
||||
|
||||
<span class="plain">#</span><span class="identifier">ifndef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
|
||||
<span class="functiontext">Copies::list_attached_errors</span><span class="plain">(</span><span class="identifier">STDERR</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">);</span>
|
||||
<span class="plain">#</span><span class="identifier">endif</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Projects::read_source_text_for is used in 4/pbm (<a href="4-pbm.html#SP7">§7</a>), 4/pfm (<a href="4-pfm.html#SP7">§7</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b>It might seem sensible to parse the opening sentence of the source text,
|
||||
the bibliographic sentence giving title and author, by looking at the result
|
||||
of sentence-breaking above. But this isn't fast enough, because the sentence
|
||||
also specifies the language used, and we need to know of any non-Engkish
|
||||
choice immediately. So a special hook in the <code class="display"><span class="extract">syntax</span></code> module calls the
|
||||
following routine as soon as <code class="display"><span class="extract">BIBLIOGRAPHIC_NT</span></code> sentence is found; thus,
|
||||
it happens during the call to <code class="display"><span class="extract">Sentences::break</span></code> above.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::notify_of_bibliographic_sentence</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">PN</span><span class="plain">) {</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain"> = </span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">PN</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (<</span><span class="identifier">titling</span><span class="plain">-</span><span class="identifier">line</span><span class="plain">>(</span><span class="identifier">W</span><span class="plain">)) {</span>
|
||||
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">-</span><span class="element">>title</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">-</span><span class="element">>author_name</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">-</span><span class="element">>author_name</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">A</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">-</span><span class="element">>author_name</span><span class="plain">;</span>
|
||||
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = <<</span><span class="identifier">rp</span><span class="plain">>>;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Projects::set_language_of_play</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Language of play: %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">-</span><span class="element">>title</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<<span class="cwebmacro">Extract title and author name wording</span> <span class="cwebmacronumber">6.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Dequote the title and, perhaps, author name</span> <span class="cwebmacronumber">6.3</span>><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="reserved">copy_error</span><span class="plain"> *</span><span class="identifier">CE</span><span class="plain"> = </span><span class="functiontext">CopyErrors::new</span><span class="plain">(</span><span class="constant">SYNTAX_CE</span><span class="plain">, </span><span class="constant">BadTitleSentence_SYNERROR</span><span class="plain">);</span>
|
||||
<span class="functiontext">CopyErrors::supply_node</span><span class="plain">(</span><span class="identifier">CE</span><span class="plain">, </span><span class="identifier">PN</span><span class="plain">);</span>
|
||||
<span class="functiontext">Copies::attach_error</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">, </span><span class="identifier">CE</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Projects::notify_of_bibliographic_sentence appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6_1"></a><b>§6.1. </b>This is what the top line of the main source text should look like, if it's
|
||||
to declare the title and author.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain"><</span><span class="identifier">titling</span><span class="plain">-</span><span class="identifier">line</span><span class="plain">> ::=</span>
|
||||
<span class="plain"><</span><span class="identifier">plain</span><span class="plain">-</span><span class="identifier">titling</span><span class="plain">-</span><span class="identifier">line</span><span class="plain">> ( </span><span class="identifier">in</span><span class="plain"> <</span><span class="identifier">natural</span><span class="plain">-</span><span class="identifier">language</span><span class="plain">> ) | ==> </span><span class="identifier">R</span><span class="plain">[1]; *</span><span class="identifier">XP</span><span class="plain"> = </span><span class="identifier">RP</span><span class="plain">[2];</span>
|
||||
<span class="plain"><</span><span class="identifier">plain</span><span class="plain">-</span><span class="identifier">titling</span><span class="plain">-</span><span class="identifier">line</span><span class="plain">> ==> </span><span class="identifier">R</span><span class="plain">[1]; *</span><span class="identifier">XP</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
|
||||
<span class="plain"><</span><span class="identifier">plain</span><span class="plain">-</span><span class="identifier">titling</span><span class="plain">-</span><span class="identifier">line</span><span class="plain">> ::=</span>
|
||||
<span class="plain">{<</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">-</span><span class="identifier">without</span><span class="plain">-</span><span class="identifier">subs</span><span class="plain">>} </span><span class="identifier">by</span><span class="plain"> ... | ==> </span><span class="identifier">TRUE</span>
|
||||
<span class="plain">{<</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">-</span><span class="identifier">without</span><span class="plain">-</span><span class="identifier">subs</span><span class="plain">>} ==> </span><span class="identifier">FALSE</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6_2"></a><b>§6.2. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Extract title and author name wording</span> <span class="cwebmacronumber">6.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">TW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">plain</span><span class="plain">-</span><span class="identifier">titling</span><span class="plain">-</span><span class="identifier">line</span><span class="plain">>, 1);</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">AW</span><span class="plain"> = </span><span class="identifier">EMPTY_WORDING</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (<<</span><span class="identifier">r</span><span class="plain">>>) </span><span class="identifier">AW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">plain</span><span class="plain">-</span><span class="identifier">titling</span><span class="plain">-</span><span class="identifier">line</span><span class="plain">>, 2);</span>
|
||||
<span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">TW</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::nonempty</span><span class="plain">(</span><span class="identifier">AW</span><span class="plain">)) {</span>
|
||||
<span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">A</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">A</span><span class="plain">, </span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">AW</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6_3"></a><b>§6.3. </b>The author is sometimes given outside of quotation marks:
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
<p>"The Large Scale Structure of Space-Time" by Lindsay Lohan</p>
|
||||
|
||||
</blockquote>
|
||||
|
||||
<p class="inwebparagraph">But not always:
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
<p>"Greek Rural Postmen and Their Cancellation Numbers" by "will.i.am"</p>
|
||||
|
||||
</blockquote>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Dequote the title and, perhaps, author name</span> <span class="cwebmacronumber">6.3</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">Str::trim_white_space</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::get_first_char</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">) == </span><span class="character">'\</span><span class="plain">"</span><span class="character">'</span><span class="plain">) && (</span><span class="identifier">Str::get_last_char</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">) == </span><span class="character">'\</span><span class="plain">"</span><span class="character">'</span><span class="plain">)) {</span>
|
||||
<span class="identifier">Str::delete_first_character</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
|
||||
<span class="identifier">Str::delete_last_character</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
|
||||
<span class="identifier">Str::trim_white_space</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Title: %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">);</span>
|
||||
<span class="identifier">Str::trim_white_space</span><span class="plain">(</span><span class="identifier">A</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::get_first_char</span><span class="plain">(</span><span class="identifier">A</span><span class="plain">) == </span><span class="character">'\</span><span class="plain">"</span><span class="character">'</span><span class="plain">) && (</span><span class="identifier">Str::get_last_char</span><span class="plain">(</span><span class="identifier">A</span><span class="plain">) == </span><span class="character">'\</span><span class="plain">"</span><span class="character">'</span><span class="plain">)) {</span>
|
||||
<span class="identifier">Str::delete_first_character</span><span class="plain">(</span><span class="identifier">A</span><span class="plain">);</span>
|
||||
<span class="identifier">Str::delete_last_character</span><span class="plain">(</span><span class="identifier">A</span><span class="plain">);</span>
|
||||
<span class="identifier">Str::trim_white_space</span><span class="plain">(</span><span class="identifier">A</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">A</span><span class="plain">) > 0) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Author: %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">A</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. </b>When Inform reads the (optional!) Options file, very early in its run, it
|
||||
tries to obey any use options in the file right away — earlier even than
|
||||
<structural-sentence>. It spots these, very crudely, as sentences which
|
||||
match the following (that is, which start with "use"). Note the final full
|
||||
stop — it's needed before sentence-breaking has even taken place.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain"><</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">option</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">shape</span><span class="plain">> ::=</span>
|
||||
<span class="identifier">use</span><span class="plain"> ... .</span>
|
||||
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">options_file_wording</span><span class="plain"> = </span><span class="identifier">EMPTY_WORDING_INIT</span><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::read_further_mandatory_text</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">feed_t</span><span class="plain"> </span><span class="identifier">id</span><span class="plain"> = </span><span class="identifier">Feeds::begin</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">TRUE</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">Projects::read_further_mandatory_text_helper</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="identifier">options_file_wording</span><span class="plain"> = </span><span class="identifier">Feeds::end</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::read_further_mandatory_text_helper</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">line</span><span class="plain">,</span>
|
||||
<span class="identifier">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">unused_state</span><span class="plain">) {</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">line</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">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Feeds::feed_stream</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (<</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">option</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">shape</span><span class="plain">>(</span><span class="identifier">W</span><span class="plain">)) {</span>
|
||||
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
|
||||
<span class="identifier">UseOptions::set_immediate_option_flags</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="plain">#</span><span class="identifier">endif</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Projects::draws_from_source_file</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">source_file</span><span class="plain"> *</span><span class="identifier">sf</span><span class="plain">) {</span>
|
||||
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = </span><span class="functiontext">Projects::source</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">) {</span>
|
||||
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">, </span><span class="reserved">build_vertex</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sf</span><span class="plain"> == </span><span class="identifier">N</span><span class="plain">-</span><span class="element">>as_source_file</span><span class="plain">)</span>
|
||||
<span class="reserved">return</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">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Projects::read_further_mandatory_text is used in <a href="#SP4">§4</a>.</p>
|
||||
|
||||
<p class="endnote">The function Projects::read_further_mandatory_text_helper appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Projects::draws_from_source_file appears nowhere else.</p>
|
||||
<p class="endnote">The structure inform_pipeline is accessed in 1/ic, 2/edt, 2/rqr, 2/nst, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/kts, 5/ls, 5/ps2, 5/ts, 6/hdn, 6/inc, 6/vmg, 7/ed, 7/ed2, 7/ec and here.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="5-ts.html">Back to 'Template Services'</a></li><li><a href="5-ls.html">Continue with 'Language Services'</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="5-ls.html">Back to 'Language Services'</a></li><li><a href="5-ps2.html">Continue with 'Project Services'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>5/ls</title>
|
||||
<title>5/ps</title>
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
@ -57,34 +57,685 @@
|
|||
<main role="main">
|
||||
|
||||
<!--Weave of '5/ps2' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#5">Chapter 5: Services for the Inform Compiler</a></li><li><b>Pipeline Services</b></li></ul><p class="purpose">A pipeline is a list of steps to be followed by the Inter processor forming the back end of the Inform compiler.</p>
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#5">Chapter 5: Genre Services</a></li><li><b>Project Services</b></li></ul><p class="purpose">Behaviour specific to copies of either the projectbundle or projectfile genres.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. </b></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">inform_pipeline</span><span class="plain"> {</span>
|
||||
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">kit_dependency</span><span class="plain"> {</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inform_kit</span><span class="plain"> *</span><span class="identifier">kit</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">because_of_language</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inform_kit</span><span class="plain"> *</span><span class="identifier">because_of_kit</span><span class="plain">;</span>
|
||||
<span class="identifier">MEMORY_MANAGEMENT</span>
|
||||
<span class="plain">} </span><span class="reserved">kit_dependency</span><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inform_project</span><span class="plain"> {</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">as_copy</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">semantic_version_number</span><span class="plain"> </span><span class="identifier">version</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">source_vertices</span><span class="plain">; </span> <span class="comment">of <code class="display"><span class="extract">build_vertex</span></code></span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">assumed_to_be_parser_IF</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">kits_to_include</span><span class="plain">; </span> <span class="comment">of <code class="display"><span class="extract">kit_dependency</span></code></span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">language_of_play</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">language_of_syntax</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">language_of_index</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">unblorbed_vertex</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">blorbed_vertex</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">chosen_build_target</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">parse_node_tree</span><span class="plain"> *</span><span class="identifier">syntax_tree</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">fix_rng</span><span class="plain">;</span>
|
||||
<span class="identifier">MEMORY_MANAGEMENT</span>
|
||||
<span class="plain">} </span><span class="reserved">inform_pipeline</span><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">inform_project</span><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">inform_pipeline</span><span class="plain"> *</span><span class="functiontext">Pipelines::new_ip</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</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="reserved">inform_pipeline</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">inform_pipeline</span><span class="plain">);</span>
|
||||
<span class="identifier">T</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">T</span><span class="plain">-</span><span class="element">>version</span><span class="plain"> = </span><span class="identifier">VersionNumbers::null</span><span class="plain">();</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">T</span><span class="plain">;</span>
|
||||
<span class="reserved">inform_project</span><span class="plain"> *</span><span class="functiontext">Projects::new_ip</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</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">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
|
||||
<span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain">);</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>version</span><span class="plain"> = </span><span class="identifier">VersionNumbers::null</span><span class="plain">();</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>source_vertices</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="reserved">build_vertex</span><span class="plain">);</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="reserved">kit_dependency</span><span class="plain">);</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>assumed_to_be_parser_IF</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>language_of_play</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>language_of_syntax</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>language_of_index</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>chosen_build_target</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>unblorbed_vertex</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>blorbed_vertex</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>fix_rng</span><span class="plain"> = 0;</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain"> = </span><span class="identifier">ParseTree::new_tree</span><span class="plain">();</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">project</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::set_to_English</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">proj</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">proj</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no project"</span><span class="plain">);</span>
|
||||
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Languages::internal_English</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">E</span><span class="plain">) {</span>
|
||||
<span class="identifier">proj</span><span class="plain">-</span><span class="element">>language_of_play</span><span class="plain"> = </span><span class="identifier">E</span><span class="plain">;</span>
|
||||
<span class="identifier">proj</span><span class="plain">-</span><span class="element">>language_of_syntax</span><span class="plain"> = </span><span class="identifier">E</span><span class="plain">;</span>
|
||||
<span class="identifier">proj</span><span class="plain">-</span><span class="element">>language_of_index</span><span class="plain"> = </span><span class="identifier">E</span><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"built-in English language definition can't be found'"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::set_language_of_play</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">proj</span><span class="plain">, </span><span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">proj</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no project"</span><span class="plain">);</span>
|
||||
<span class="identifier">proj</span><span class="plain">-</span><span class="element">>language_of_play</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="functiontext">Projects::get_language_of_play</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">proj</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">proj</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">proj</span><span class="plain">-</span><span class="element">>language_of_play</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::set_language_of_index</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">proj</span><span class="plain">, </span><span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">proj</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no project"</span><span class="plain">);</span>
|
||||
<span class="identifier">proj</span><span class="plain">-</span><span class="element">>language_of_index</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="functiontext">Projects::get_language_of_index</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">proj</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">proj</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">proj</span><span class="plain">-</span><span class="element">>language_of_index</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::set_language_of_syntax</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">proj</span><span class="plain">, </span><span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">proj</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no project"</span><span class="plain">);</span>
|
||||
<span class="identifier">proj</span><span class="plain">-</span><span class="element">>language_of_syntax</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="functiontext">Projects::get_language_of_syntax</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">proj</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">proj</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">proj</span><span class="plain">-</span><span class="element">>language_of_syntax</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::fix_rng</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">seed</span><span class="plain">) {</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>fix_rng</span><span class="plain"> = </span><span class="identifier">seed</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::not_necessarily_parser_IF</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>assumed_to_be_parser_IF</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::set_source_filename</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</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">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">) {</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">manifest</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.txt"</span><span class="plain">);</span>
|
||||
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">L</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">manifest</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">Projects::manifest_helper</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">L</span><span class="plain">);</span>
|
||||
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">leafname</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">leafname</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">) {</span>
|
||||
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="functiontext">Graphs::file_vertex</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">leafname</span><span class="plain">));</span>
|
||||
<span class="identifier">S</span><span class="plain">-</span><span class="element">>source_source</span><span class="plain"> = </span><span class="identifier">leafname</span><span class="plain">;</span>
|
||||
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">build_vertex</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>source_vertices</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">LinkedLists::len</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>source_vertices</span><span class="plain">) == 0) && (</span><span class="identifier">F</span><span class="plain">)) {</span>
|
||||
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="functiontext">Graphs::file_vertex</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">);</span>
|
||||
<span class="identifier">S</span><span class="plain">-</span><span class="element">>source_source</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"your source text"</span><span class="plain">;</span>
|
||||
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">build_vertex</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>source_vertices</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::manifest_helper</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">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="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = (</span><span class="identifier">linked_list</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
|
||||
<span class="identifier">Str::trim_white_space</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">);</span>
|
||||
<span class="identifier">wchar_t</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_first_char</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> == 0) || (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'#'</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">), </span><span class="identifier">text_stream</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="identifier">pathname</span><span class="plain"> *</span><span class="functiontext">Projects::path</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">project</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>location_if_path</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="functiontext">Projects::source</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">project</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>source_vertices</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::add_kit_dependency</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">kit_name</span><span class="plain">,</span>
|
||||
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">because_of_language</span><span class="plain">, </span><span class="reserved">inform_kit</span><span class="plain"> *</span><span class="identifier">because_of_kit</span><span class="plain">) {</span>
|
||||
<span class="identifier">RUN_ONLY_BEFORE_PHASE</span><span class="plain">(</span><span class="constant">OPERATIONAL_INBUILD_PHASE</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Projects::uses_kit</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">kit_name</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">kit_dependency</span><span class="plain">);</span>
|
||||
<span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain"> = </span><span class="functiontext">Kits::load</span><span class="plain">(</span><span class="identifier">kit_name</span><span class="plain">, </span><span class="functiontext">Inbuild::nest_list</span><span class="plain">());</span>
|
||||
<span class="identifier">kd</span><span class="plain">-</span><span class="element">>because_of_language</span><span class="plain"> = </span><span class="identifier">because_of_language</span><span class="plain">;</span>
|
||||
<span class="identifier">kd</span><span class="plain">-</span><span class="element">>because_of_kit</span><span class="plain"> = </span><span class="identifier">because_of_kit</span><span class="plain">;</span>
|
||||
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Projects::uses_kit</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</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">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">-</span><span class="element">>title</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">))</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::finalise_kit_dependencies</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Projects::add_kit_dependency</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"BasicInformKit"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>language_of_play</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">) {</span>
|
||||
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">kit_name</span><span class="plain"> = </span><span class="functiontext">Languages::kit_name</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">);</span>
|
||||
<span class="functiontext">Projects::add_kit_dependency</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">kit_name</span><span class="plain">, </span><span class="identifier">L</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">project</span><span class="plain">-</span><span class="element">>assumed_to_be_parser_IF</span><span class="plain">)</span>
|
||||
<span class="functiontext">Projects::add_kit_dependency</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"CommandParserKit"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">parity</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Perform if-this-then-that</span> <span class="cwebmacronumber">1.1</span>><span class="plain">;</span>
|
||||
<span class="identifier">parity</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Perform if-this-then-that</span> <span class="cwebmacronumber">1.1</span>><span class="plain">;</span>
|
||||
|
||||
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">sorted</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="reserved">kit_dependency</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">p</span><span class="plain">=0; </span><span class="identifier">p</span><span class="plain"><100; </span><span class="identifier">p</span><span class="plain">++) {</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">-</span><span class="element">>priority</span><span class="plain"> == </span><span class="identifier">p</span><span class="plain">)</span>
|
||||
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">sorted</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain"> = </span><span class="identifier">sorted</span><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">)</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Using Inform kit '%S' (priority %d).\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">-</span><span class="element">>title</span><span class="plain">, </span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">-</span><span class="element">>priority</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Pipelines::new_ip is used in 4/pm (<a href="4-pm.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function Projects::new_ip is used in 4/pbm (<a href="4-pbm.html#SP2">§2</a>), 4/pfm (<a href="4-pfm.html#SP2">§2</a>).</p>
|
||||
|
||||
<p class="endnote">The structure inform_pipeline is accessed in 1/ic, 2/edt, 2/rqr, 2/nst, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 4/lm, 4/pbm, 4/pfm, 4/tm, 4/pm, 5/kts, 5/es, 5/ed, 5/ed2, 5/ec, 5/ts, 5/ps, 5/ls, 6/hdn, 6/inc, 6/vmg and here.</p>
|
||||
<p class="endnote">The function Projects::set_to_English is used in 1/ic (<a href="1-ic.html#SP9_2">§9.2</a>).</p>
|
||||
|
||||
<p class="endnote">The function Projects::set_language_of_play is used in <a href="#SP6">§6</a>.</p>
|
||||
|
||||
<p class="endnote">The function Projects::get_language_of_play appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Projects::set_language_of_index appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Projects::get_language_of_index appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Projects::set_language_of_syntax appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Projects::get_language_of_syntax is used in 1/ic (<a href="1-ic.html#SP9_2">§9.2</a>).</p>
|
||||
|
||||
<p class="endnote">The function Projects::fix_rng is used in 1/ic (<a href="1-ic.html#SP19">§19</a>).</p>
|
||||
|
||||
<p class="endnote">The function Projects::not_necessarily_parser_IF is used in 1/ic (<a href="1-ic.html#SP22">§22</a>).</p>
|
||||
|
||||
<p class="endnote">The function Projects::set_source_filename is used in 1/ic (<a href="1-ic.html#SP19">§19</a>).</p>
|
||||
|
||||
<p class="endnote">The function Projects::manifest_helper appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Projects::path is used in <a href="#SP3">§3</a>.</p>
|
||||
|
||||
<p class="endnote">The function Projects::source is used in <a href="#SP4">§4</a>, <a href="#SP7">§7</a>.</p>
|
||||
|
||||
<p class="endnote">The function Projects::add_kit_dependency is used in 1/ic (<a href="1-ic.html#SP22">§22</a>), 5/kts (<a href="5-kts.html#SP1">§1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Projects::uses_kit is used in 5/kts (<a href="5-kts.html#SP1">§1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Projects::finalise_kit_dependencies is used in <a href="#SP4">§4</a>.</p>
|
||||
|
||||
<p class="endnote">The structure kit_dependency is accessed in 3/is2 and here.</p>
|
||||
|
||||
<p class="endnote">The structure inform_project is accessed in 1/ic, 2/edt, 2/rqr, 2/nst, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/kts, 5/ls, 5/ps, 5/ts, 6/hdn, 6/inc, 6/vmg, 7/ed, 7/ed2, 7/ec and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1_1"></a><b>§1.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Perform if-this-then-that</span> <span class="cwebmacronumber">1.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">changes_made</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">changes_made</span><span class="plain">) {</span>
|
||||
<span class="identifier">changes_made</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Kits::perform_ittt</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">parity</span><span class="plain">))</span>
|
||||
<span class="identifier">changes_made</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP1">§1</a> (twice).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::load_types</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">)</span>
|
||||
<span class="functiontext">Kits::load_types</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">#</span><span class="identifier">endif</span>
|
||||
|
||||
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::activate_plugins</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Activate plugins...\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||||
<span class="identifier">Plugins::Manage::activate</span><span class="plain">(</span><span class="identifier">CORE_PLUGIN_NAME</span><span class="plain">);</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">)</span>
|
||||
<span class="functiontext">Kits::activate_plugins</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">);</span>
|
||||
<span class="identifier">Plugins::Manage::show</span><span class="plain">(</span><span class="identifier">DL</span><span class="plain">, </span><span class="string">"Included"</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="identifier">Plugins::Manage::show</span><span class="plain">(</span><span class="identifier">DL</span><span class="plain">, </span><span class="string">"Excluded"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">#</span><span class="identifier">endif</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Projects::Main_defined</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">-</span><span class="element">>defines_Main</span><span class="plain">)</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">Projects::index_template</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">-</span><span class="element">>index_template</span><span class="plain">)</span>
|
||||
<span class="identifier">I</span><span class="plain"> = </span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">-</span><span class="element">>index_template</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Projects::load_types appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Projects::activate_plugins is used in <a href="#SP4">§4</a>.</p>
|
||||
|
||||
<p class="endnote">The function Projects::Main_defined appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Projects::index_template appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>Every source text read into Inform is automatically prefixed by a few words
|
||||
loading the fundamental "extensions" — text such as "Include Basic Inform by
|
||||
Graham Nelson." If Inform were a computer, this would be the BIOS which boots
|
||||
up its operating system. Each kit can contribute such extensions, so there
|
||||
may be multiple sentences, which we need to count up.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::early_source_text</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">)</span>
|
||||
<span class="functiontext">Kits::early_source_text</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CODEGEN_MODULE</span>
|
||||
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="functiontext">Projects::list_of_inter_libraries</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">requirements_list</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="identifier">link_instruction</span><span class="plain">);</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">) {</span>
|
||||
<span class="reserved">inform_kit</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain"> = </span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">;</span>
|
||||
<span class="identifier">link_instruction</span><span class="plain"> *</span><span class="identifier">link</span><span class="plain"> = </span><span class="identifier">CodeGen::LinkInstructions::new</span><span class="plain">(</span>
|
||||
<span class="identifier">K</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>location_if_path</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">-</span><span class="element">>attachment_point</span><span class="plain">);</span>
|
||||
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">link</span><span class="plain">, </span><span class="identifier">link_instruction</span><span class="plain">, </span><span class="identifier">requirements_list</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">requirements_list</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">#</span><span class="identifier">endif</span>
|
||||
|
||||
<span class="identifier">pathname</span><span class="plain"> *</span><span class="functiontext">Projects::build_pathname</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</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="functiontext">Projects::path</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Build"</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inbuild::transient</span><span class="plain">();</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::construct_build_target</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">target_vm</span><span class="plain"> *</span><span class="identifier">VM</span><span class="plain">,</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">releasing</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">compile_only</span><span class="plain">) {</span>
|
||||
<span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">build_folder</span><span class="plain"> = </span><span class="functiontext">Projects::build_pathname</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">);</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">inf_F</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">build_folder</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"auto.inf"</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">inter_V</span><span class="plain"> = </span><span class="functiontext">Graphs::file_vertex</span><span class="plain">(</span><span class="identifier">inf_F</span><span class="plain">);</span>
|
||||
<span class="functiontext">Graphs::need_this_to_build</span><span class="plain">(</span><span class="identifier">inter_V</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>vertex</span><span class="plain">);</span>
|
||||
<span class="functiontext">BuildSteps::attach</span><span class="plain">(</span><span class="identifier">inter_V</span><span class="plain">, </span><span class="identifier">compile_using_inform7_skill</span><span class="plain">,</span>
|
||||
<span class="functiontext">Inbuild::nest_list</span><span class="plain">(), </span><span class="identifier">releasing</span><span class="plain">, </span><span class="identifier">VM</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">inf_V</span><span class="plain"> = </span><span class="functiontext">Graphs::file_vertex</span><span class="plain">(</span><span class="identifier">inf_F</span><span class="plain">);</span>
|
||||
<span class="functiontext">Graphs::need_this_to_build</span><span class="plain">(</span><span class="identifier">inf_V</span><span class="plain">, </span><span class="identifier">inter_V</span><span class="plain">);</span>
|
||||
<span class="functiontext">BuildSteps::attach</span><span class="plain">(</span><span class="identifier">inf_V</span><span class="plain">, </span><span class="identifier">code_generate_using_inter_skill</span><span class="plain">,</span>
|
||||
<span class="functiontext">Inbuild::nest_list</span><span class="plain">(), </span><span class="identifier">releasing</span><span class="plain">, </span><span class="identifier">VM</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">story_file_leafname</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">story_file_leafname</span><span class="plain">, </span><span class="string">"output.%S"</span><span class="plain">, </span><span class="identifier">TargetVMs::get_unblorbed_extension</span><span class="plain">(</span><span class="identifier">VM</span><span class="plain">));</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">unblorbed_F</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">build_folder</span><span class="plain">, </span><span class="identifier">story_file_leafname</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">story_file_leafname</span><span class="plain">);</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>unblorbed_vertex</span><span class="plain"> = </span><span class="functiontext">Graphs::file_vertex</span><span class="plain">(</span><span class="identifier">unblorbed_F</span><span class="plain">);</span>
|
||||
<span class="functiontext">Graphs::need_this_to_build</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>unblorbed_vertex</span><span class="plain">, </span><span class="identifier">inf_V</span><span class="plain">);</span>
|
||||
<span class="functiontext">BuildSteps::attach</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>unblorbed_vertex</span><span class="plain">, </span><span class="identifier">compile_using_inform6_skill</span><span class="plain">,</span>
|
||||
<span class="functiontext">Inbuild::nest_list</span><span class="plain">(), </span><span class="identifier">releasing</span><span class="plain">, </span><span class="identifier">VM</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">story_file_leafname2</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">story_file_leafname2</span><span class="plain">, </span><span class="string">"output.%S"</span><span class="plain">, </span><span class="identifier">TargetVMs::get_blorbed_extension</span><span class="plain">(</span><span class="identifier">VM</span><span class="plain">));</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">blorbed_F</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">build_folder</span><span class="plain">, </span><span class="identifier">story_file_leafname2</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">story_file_leafname2</span><span class="plain">);</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>blorbed_vertex</span><span class="plain"> = </span><span class="functiontext">Graphs::file_vertex</span><span class="plain">(</span><span class="identifier">blorbed_F</span><span class="plain">);</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>blorbed_vertex</span><span class="plain">-</span><span class="element">>always_build_this</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="functiontext">Graphs::need_this_to_build</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>blorbed_vertex</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>unblorbed_vertex</span><span class="plain">);</span>
|
||||
<span class="functiontext">BuildSteps::attach</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>blorbed_vertex</span><span class="plain">, </span><span class="identifier">package_using_inblorb_skill</span><span class="plain">,</span>
|
||||
<span class="functiontext">Inbuild::nest_list</span><span class="plain">(), </span><span class="identifier">releasing</span><span class="plain">, </span><span class="identifier">VM</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">compile_only</span><span class="plain">) {</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>chosen_build_target</span><span class="plain"> = </span><span class="identifier">inf_V</span><span class="plain">;</span>
|
||||
<span class="identifier">inf_V</span><span class="plain">-</span><span class="element">>always_build_this</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="reserved">if</span><span class="plain"> (</span><span class="identifier">releasing</span><span class="plain">) </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>chosen_build_target</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>blorbed_vertex</span><span class="plain">;</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>chosen_build_target</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>unblorbed_vertex</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::graph_dependent_kit</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">, </span><span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">use</span><span class="plain">) {</span>
|
||||
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">KV</span><span class="plain"> = </span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>vertex</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">use</span><span class="plain">) </span><span class="functiontext">Graphs::need_this_to_use</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">KV</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">Graphs::need_this_to_build</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">KV</span><span class="plain">);</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd2</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd2</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">kd2</span><span class="plain">-</span><span class="element">>because_of_kit</span><span class="plain"> == </span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>kit</span><span class="plain">) && (</span><span class="identifier">kd2</span><span class="plain">-</span><span class="element">>because_of_language</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">))</span>
|
||||
<span class="functiontext">Projects::graph_dependent_kit</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">KV</span><span class="plain">, </span><span class="identifier">kd2</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::graph_dependent_language</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">, </span><span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain">, </span><span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">use</span><span class="plain">) {</span>
|
||||
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">LV</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>vertex</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">use</span><span class="plain">) </span><span class="functiontext">Graphs::need_this_to_use</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">LV</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">Graphs::need_this_to_build</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">LV</span><span class="plain">);</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd2</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd2</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">kd2</span><span class="plain">-</span><span class="element">>because_of_kit</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) && (</span><span class="identifier">kd2</span><span class="plain">-</span><span class="element">>because_of_language</span><span class="plain"> == </span><span class="identifier">L</span><span class="plain">))</span>
|
||||
<span class="functiontext">Projects::graph_dependent_kit</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">LV</span><span class="plain">, </span><span class="identifier">kd2</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::construct_graph</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="identifier">RUN_ONLY_IN_PHASE</span><span class="plain">(</span><span class="constant">GRAPH_CONSTRUCTION_INBUILD_PHASE</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">project</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>vertex</span><span class="plain">;</span>
|
||||
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">build_vertex</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>source_vertices</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Graphs::need_this_to_build</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">kit_dependency</span><span class="plain"> *</span><span class="identifier">kd</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">kd</span><span class="plain">, </span><span class="reserved">kit_dependency</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>kits_to_include</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>because_of_kit</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) && (</span><span class="identifier">kd</span><span class="plain">-</span><span class="element">>because_of_language</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">))</span>
|
||||
<span class="functiontext">Projects::graph_dependent_kit</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">kd</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>language_of_play</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">) </span><span class="functiontext">Projects::graph_dependent_language</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="identifier">L</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>language_of_syntax</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">) </span><span class="functiontext">Projects::graph_dependent_language</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="identifier">L</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>language_of_index</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">) </span><span class="functiontext">Projects::graph_dependent_language</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Projects::early_source_text is used in <a href="#SP4">§4</a>.</p>
|
||||
|
||||
<p class="endnote">The function Projects::list_of_inter_libraries is used in 3/is (<a href="3-is.html#SP4">§4</a>).</p>
|
||||
|
||||
<p class="endnote">The function Projects::build_pathname appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Projects::construct_build_target is used in 1/ic (<a href="1-ic.html#SP9">§9</a>).</p>
|
||||
|
||||
<p class="endnote">The function Projects::graph_dependent_kit appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Projects::graph_dependent_language appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Projects::construct_graph is used in 4/pbm (<a href="4-pbm.html#SP6">§6</a>), 4/pfm (<a href="4-pfm.html#SP6">§6</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b></p>
|
||||
|
||||
|
||||
<pre class="definitions">
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">BadTitleSentence_SYNERROR</span>
|
||||
</pre>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::read_source_text_for</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Projects::finalise_kit_dependencies</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">inclusions_heading</span><span class="plain"> = </span><span class="identifier">ParseTree::new</span><span class="plain">(</span><span class="identifier">HEADING_NT</span><span class="plain">);</span>
|
||||
<span class="identifier">ParseTree::set_text</span><span class="plain">(</span><span class="identifier">inclusions_heading</span><span class="plain">,</span>
|
||||
<span class="identifier">Feeds::feed_text_expanding_strings</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"Implied inclusions"</span><span class="plain">));</span>
|
||||
<span class="identifier">ParseTree::insert_sentence</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">inclusions_heading</span><span class="plain">);</span>
|
||||
<span class="identifier">ParseTree::annotate_int</span><span class="plain">(</span><span class="identifier">inclusions_heading</span><span class="plain">, </span><span class="identifier">sentence_unparsed_ANNOT</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="identifier">ParseTree::annotate_int</span><span class="plain">(</span><span class="identifier">inclusions_heading</span><span class="plain">, </span><span class="identifier">heading_level_ANNOT</span><span class="plain">, 0);</span>
|
||||
<span class="identifier">ParseTree::annotate_int</span><span class="plain">(</span><span class="identifier">inclusions_heading</span><span class="plain">, </span><span class="identifier">implied_heading_ANNOT</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="functiontext">Headings::declare</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">inclusions_heading</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">wc</span><span class="plain"> = </span><span class="identifier">lexer_wordcount</span><span class="plain">;</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">early</span><span class="plain">);</span>
|
||||
<span class="functiontext">Projects::early_source_text</span><span class="plain">(</span><span class="identifier">early</span><span class="plain">, </span><span class="identifier">project</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">early</span><span class="plain">) > 0) </span><span class="identifier">Feeds::feed_stream</span><span class="plain">(</span><span class="identifier">early</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">early</span><span class="plain">);</span>
|
||||
<span class="reserved">inbuild_nest</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inbuild::external</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">E</span><span class="plain">) </span><span class="functiontext">Projects::read_further_mandatory_text</span><span class="plain">(</span>
|
||||
<span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">-</span><span class="element">>location</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Options.txt"</span><span class="plain">));</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">early_W</span><span class="plain"> = </span><span class="identifier">Wordings::new</span><span class="plain">(</span><span class="identifier">wc</span><span class="plain">, </span><span class="identifier">lexer_wordcount</span><span class="plain">-1);</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">l</span><span class="plain"> = </span><span class="identifier">ParseTree::push_attachment_point</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">inclusions_heading</span><span class="plain">);</span>
|
||||
<span class="identifier">Sentences::break_into_project_copy</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">early_W</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">);</span>
|
||||
<span class="identifier">ParseTree::pop_attachment_point</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">l</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">wc</span><span class="plain"> = </span><span class="identifier">lexer_wordcount</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">start_set</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = </span><span class="functiontext">Projects::source</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">) {</span>
|
||||
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">, </span><span class="reserved">build_vertex</span><span class="plain">, </span><span class="identifier">L</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">N</span><span class="plain">-</span><span class="element">>as_file</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">start_set</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
||||
<span class="identifier">start_set</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="identifier">Sentences::set_start_of_source</span><span class="plain">(</span><span class="identifier">lexer_wordcount</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">N</span><span class="plain">-</span><span class="element">>as_source_file</span><span class="plain"> = </span><span class="functiontext">SourceText::read_file</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">-</span><span class="element">>source_source</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="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">l</span><span class="plain"> = </span><span class="identifier">ParseTree::push_attachment_point</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">-></span><span class="identifier">root_node</span><span class="plain">);</span>
|
||||
<span class="identifier">Sentences::break_into_project_copy</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">Wordings::new</span><span class="plain">(</span><span class="identifier">wc</span><span class="plain">, </span><span class="identifier">lexer_wordcount</span><span class="plain">-1), </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">);</span>
|
||||
<span class="identifier">ParseTree::pop_attachment_point</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">l</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">l</span><span class="plain"> = </span><span class="identifier">ParseTree::push_attachment_point</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">-></span><span class="identifier">root_node</span><span class="plain">);</span>
|
||||
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">implicit_heading</span><span class="plain"> = </span><span class="identifier">ParseTree::new</span><span class="plain">(</span><span class="identifier">HEADING_NT</span><span class="plain">);</span>
|
||||
<span class="identifier">ParseTree::set_text</span><span class="plain">(</span><span class="identifier">implicit_heading</span><span class="plain">, </span><span class="identifier">Feeds::feed_text_expanding_strings</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"Invented sentences"</span><span class="plain">));</span>
|
||||
<span class="identifier">ParseTree::insert_sentence</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">implicit_heading</span><span class="plain">);</span>
|
||||
<span class="identifier">ParseTree::annotate_int</span><span class="plain">(</span><span class="identifier">implicit_heading</span><span class="plain">, </span><span class="identifier">sentence_unparsed_ANNOT</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="identifier">ParseTree::annotate_int</span><span class="plain">(</span><span class="identifier">implicit_heading</span><span class="plain">, </span><span class="identifier">heading_level_ANNOT</span><span class="plain">, 0);</span>
|
||||
<span class="functiontext">Headings::declare</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">implicit_heading</span><span class="plain">);</span>
|
||||
<span class="identifier">ParseTree::pop_attachment_point</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">l</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">ParseTree::push_attachment_point</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">implicit_heading</span><span class="plain">);</span>
|
||||
|
||||
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
|
||||
<span class="functiontext">Projects::activate_plugins</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">);</span>
|
||||
<span class="plain">#</span><span class="identifier">endif</span>
|
||||
<span class="functiontext">Inclusions::traverse</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">);</span>
|
||||
<span class="functiontext">Headings::satisfy_dependencies</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>syntax_tree</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">);</span>
|
||||
|
||||
<span class="plain">#</span><span class="identifier">ifndef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
|
||||
<span class="functiontext">Copies::list_attached_errors</span><span class="plain">(</span><span class="identifier">STDERR</span><span class="plain">, </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">);</span>
|
||||
<span class="plain">#</span><span class="identifier">endif</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Projects::read_source_text_for is used in 4/pbm (<a href="4-pbm.html#SP7">§7</a>), 4/pfm (<a href="4-pfm.html#SP7">§7</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b>It might seem sensible to parse the opening sentence of the source text,
|
||||
the bibliographic sentence giving title and author, by looking at the result
|
||||
of sentence-breaking above. But this isn't fast enough, because the sentence
|
||||
also specifies the language used, and we need to know of any non-Engkish
|
||||
choice immediately. So a special hook in the <code class="display"><span class="extract">syntax</span></code> module calls the
|
||||
following routine as soon as <code class="display"><span class="extract">BIBLIOGRAPHIC_NT</span></code> sentence is found; thus,
|
||||
it happens during the call to <code class="display"><span class="extract">Sentences::break</span></code> above.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::notify_of_bibliographic_sentence</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">PN</span><span class="plain">) {</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain"> = </span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">PN</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (<</span><span class="identifier">titling</span><span class="plain">-</span><span class="identifier">line</span><span class="plain">>(</span><span class="identifier">W</span><span class="plain">)) {</span>
|
||||
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">-</span><span class="element">>title</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">-</span><span class="element">>author_name</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
|
||||
<span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">-</span><span class="element">>author_name</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">A</span><span class="plain"> = </span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">-</span><span class="element">>author_name</span><span class="plain">;</span>
|
||||
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = <<</span><span class="identifier">rp</span><span class="plain">>>;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Projects::set_language_of_play</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Language of play: %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">-</span><span class="element">>edition</span><span class="plain">-</span><span class="element">>work</span><span class="plain">-</span><span class="element">>title</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<<span class="cwebmacro">Extract title and author name wording</span> <span class="cwebmacronumber">6.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Dequote the title and, perhaps, author name</span> <span class="cwebmacronumber">6.3</span>><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="reserved">copy_error</span><span class="plain"> *</span><span class="identifier">CE</span><span class="plain"> = </span><span class="functiontext">CopyErrors::new</span><span class="plain">(</span><span class="constant">SYNTAX_CE</span><span class="plain">, </span><span class="constant">BadTitleSentence_SYNERROR</span><span class="plain">);</span>
|
||||
<span class="functiontext">CopyErrors::supply_node</span><span class="plain">(</span><span class="identifier">CE</span><span class="plain">, </span><span class="identifier">PN</span><span class="plain">);</span>
|
||||
<span class="functiontext">Copies::attach_error</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">-</span><span class="element">>as_copy</span><span class="plain">, </span><span class="identifier">CE</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Projects::notify_of_bibliographic_sentence appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6_1"></a><b>§6.1. </b>This is what the top line of the main source text should look like, if it's
|
||||
to declare the title and author.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain"><</span><span class="identifier">titling</span><span class="plain">-</span><span class="identifier">line</span><span class="plain">> ::=</span>
|
||||
<span class="plain"><</span><span class="identifier">plain</span><span class="plain">-</span><span class="identifier">titling</span><span class="plain">-</span><span class="identifier">line</span><span class="plain">> ( </span><span class="identifier">in</span><span class="plain"> <</span><span class="identifier">natural</span><span class="plain">-</span><span class="identifier">language</span><span class="plain">> ) | ==> </span><span class="identifier">R</span><span class="plain">[1]; *</span><span class="identifier">XP</span><span class="plain"> = </span><span class="identifier">RP</span><span class="plain">[2];</span>
|
||||
<span class="plain"><</span><span class="identifier">plain</span><span class="plain">-</span><span class="identifier">titling</span><span class="plain">-</span><span class="identifier">line</span><span class="plain">> ==> </span><span class="identifier">R</span><span class="plain">[1]; *</span><span class="identifier">XP</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
|
||||
<span class="plain"><</span><span class="identifier">plain</span><span class="plain">-</span><span class="identifier">titling</span><span class="plain">-</span><span class="identifier">line</span><span class="plain">> ::=</span>
|
||||
<span class="plain">{<</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">-</span><span class="identifier">without</span><span class="plain">-</span><span class="identifier">subs</span><span class="plain">>} </span><span class="identifier">by</span><span class="plain"> ... | ==> </span><span class="identifier">TRUE</span>
|
||||
<span class="plain">{<</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">-</span><span class="identifier">without</span><span class="plain">-</span><span class="identifier">subs</span><span class="plain">>} ==> </span><span class="identifier">FALSE</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6_2"></a><b>§6.2. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Extract title and author name wording</span> <span class="cwebmacronumber">6.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">TW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">plain</span><span class="plain">-</span><span class="identifier">titling</span><span class="plain">-</span><span class="identifier">line</span><span class="plain">>, 1);</span>
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">AW</span><span class="plain"> = </span><span class="identifier">EMPTY_WORDING</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (<<</span><span class="identifier">r</span><span class="plain">>>) </span><span class="identifier">AW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">plain</span><span class="plain">-</span><span class="identifier">titling</span><span class="plain">-</span><span class="identifier">line</span><span class="plain">>, 2);</span>
|
||||
<span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">TW</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::nonempty</span><span class="plain">(</span><span class="identifier">AW</span><span class="plain">)) {</span>
|
||||
<span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">A</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">A</span><span class="plain">, </span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">AW</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6_3"></a><b>§6.3. </b>The author is sometimes given outside of quotation marks:
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
<p>"The Large Scale Structure of Space-Time" by Lindsay Lohan</p>
|
||||
|
||||
</blockquote>
|
||||
|
||||
<p class="inwebparagraph">But not always:
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
<p>"Greek Rural Postmen and Their Cancellation Numbers" by "will.i.am"</p>
|
||||
|
||||
</blockquote>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Dequote the title and, perhaps, author name</span> <span class="cwebmacronumber">6.3</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">Str::trim_white_space</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::get_first_char</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">) == </span><span class="character">'\</span><span class="plain">"</span><span class="character">'</span><span class="plain">) && (</span><span class="identifier">Str::get_last_char</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">) == </span><span class="character">'\</span><span class="plain">"</span><span class="character">'</span><span class="plain">)) {</span>
|
||||
<span class="identifier">Str::delete_first_character</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
|
||||
<span class="identifier">Str::delete_last_character</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
|
||||
<span class="identifier">Str::trim_white_space</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Title: %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">);</span>
|
||||
<span class="identifier">Str::trim_white_space</span><span class="plain">(</span><span class="identifier">A</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::get_first_char</span><span class="plain">(</span><span class="identifier">A</span><span class="plain">) == </span><span class="character">'\</span><span class="plain">"</span><span class="character">'</span><span class="plain">) && (</span><span class="identifier">Str::get_last_char</span><span class="plain">(</span><span class="identifier">A</span><span class="plain">) == </span><span class="character">'\</span><span class="plain">"</span><span class="character">'</span><span class="plain">)) {</span>
|
||||
<span class="identifier">Str::delete_first_character</span><span class="plain">(</span><span class="identifier">A</span><span class="plain">);</span>
|
||||
<span class="identifier">Str::delete_last_character</span><span class="plain">(</span><span class="identifier">A</span><span class="plain">);</span>
|
||||
<span class="identifier">Str::trim_white_space</span><span class="plain">(</span><span class="identifier">A</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">A</span><span class="plain">) > 0) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Author: %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">A</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP6">§6</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. </b>When Inform reads the (optional!) Options file, very early in its run, it
|
||||
tries to obey any use options in the file right away — earlier even than
|
||||
<structural-sentence>. It spots these, very crudely, as sentences which
|
||||
match the following (that is, which start with "use"). Note the final full
|
||||
stop — it's needed before sentence-breaking has even taken place.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain"><</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">option</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">shape</span><span class="plain">> ::=</span>
|
||||
<span class="identifier">use</span><span class="plain"> ... .</span>
|
||||
|
||||
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">options_file_wording</span><span class="plain"> = </span><span class="identifier">EMPTY_WORDING_INIT</span><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::read_further_mandatory_text</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">feed_t</span><span class="plain"> </span><span class="identifier">id</span><span class="plain"> = </span><span class="identifier">Feeds::begin</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">TRUE</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">Projects::read_further_mandatory_text_helper</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="identifier">options_file_wording</span><span class="plain"> = </span><span class="identifier">Feeds::end</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Projects::read_further_mandatory_text_helper</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">line</span><span class="plain">,</span>
|
||||
<span class="identifier">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">unused_state</span><span class="plain">) {</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">line</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">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Feeds::feed_stream</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (<</span><span class="identifier">use</span><span class="plain">-</span><span class="identifier">option</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">shape</span><span class="plain">>(</span><span class="identifier">W</span><span class="plain">)) {</span>
|
||||
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
|
||||
<span class="identifier">UseOptions::set_immediate_option_flags</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="plain">#</span><span class="identifier">endif</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Projects::draws_from_source_file</span><span class="plain">(</span><span class="reserved">inform_project</span><span class="plain"> *</span><span class="identifier">project</span><span class="plain">, </span><span class="identifier">source_file</span><span class="plain"> *</span><span class="identifier">sf</span><span class="plain">) {</span>
|
||||
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = </span><span class="functiontext">Projects::source</span><span class="plain">(</span><span class="identifier">project</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">) {</span>
|
||||
<span class="reserved">build_vertex</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">, </span><span class="reserved">build_vertex</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sf</span><span class="plain"> == </span><span class="identifier">N</span><span class="plain">-</span><span class="element">>as_source_file</span><span class="plain">)</span>
|
||||
<span class="reserved">return</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">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Projects::read_further_mandatory_text is used in <a href="#SP4">§4</a>.</p>
|
||||
|
||||
<p class="endnote">The function Projects::read_further_mandatory_text_helper appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Projects::draws_from_source_file appears nowhere else.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="5-ls.html">Back to 'Language Services'</a></li><li><i>(This section ends Chapter 5: Services for the Inform Compiler.)</i></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="5-ps.html">Back to 'Pipeline Services'</a></li><li><a href="5-ts.html">Continue with 'Template Services'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>5/ec</title>
|
||||
<title>5/ps2</title>
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
@ -57,7 +57,7 @@
|
|||
<main role="main">
|
||||
|
||||
<!--Weave of '5/ts' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#5">Chapter 5: Services for the Inform Compiler</a></li><li><b>Template Services</b></li></ul><p class="purpose">An Inform 7 website template.</p>
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#5">Chapter 5: Genre Services</a></li><li><b>Template Services</b></li></ul><p class="purpose">Behaviour specific to copies of the template genre.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. </b></p>
|
||||
|
||||
|
@ -81,10 +81,10 @@
|
|||
|
||||
<p class="endnote">The function Templates::new_it is used in 4/tm (<a href="4-tm.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="endnote">The structure inform_template is accessed in 1/ic, 2/edt, 2/rqr, 2/nst, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 4/lm, 4/pbm, 4/pfm, 4/tm, 4/pm, 5/kts, 5/es, 5/ed, 5/ed2, 5/ec, 5/ps, 5/ls, 5/ps2, 6/hdn, 6/inc, 6/vmg and here.</p>
|
||||
<p class="endnote">The structure inform_template is accessed in 1/ic, 2/edt, 2/rqr, 2/nst, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/kts, 5/ls, 5/ps, 5/ps2, 6/hdn, 6/inc, 6/vmg, 7/ed, 7/ed2, 7/ec and here.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="5-ec.html">Back to 'Extension Census'</a></li><li><a href="5-ps.html">Continue with 'Project Services'</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="5-ps2.html">Back to 'Project Services'</a></li><li><i>(This section ends Chapter 5: Genre Services.)</i></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
<main role="main">
|
||||
|
||||
<!--Weave of '6/cs' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#6">Chapter 6: Handling Inform Source Text</a></li><li><b>Control Structures</b></li></ul><p class="purpose">To specify the syntax of control structures such as repeat, if and otherwise.</p>
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#6">Chapter 6: Inform Source Text</a></li><li><b>Control Structures</b></li></ul><p class="purpose">To specify the syntax of control structures such as repeat, if and otherwise.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. </b>Certain phrases are "structural": otherwise, if, repeat, while and so
|
||||
on. These have different expectations in terms of the layout of surrounding
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
<main role="main">
|
||||
|
||||
<!--Weave of '6/hdn' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#6">Chapter 6: Handling Inform Source Text</a></li><li><b>Headings</b></li></ul><p class="purpose">To keep track of the hierarchy of headings and subheadings found in the source text.</p>
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#6">Chapter 6: Inform Source Text</a></li><li><b>Headings</b></li></ul><p class="purpose">To keep track of the hierarchy of headings and subheadings found in the source text.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP8">§8. Declarations</a></li><li><a href="#SP11_2">§11.2. Parsing heading qualifiers</a></li><li><a href="#SP15">§15. The heading tree</a></li><li><a href="#SP17">§17. Verifying the heading tree</a></li><li><a href="#SP18">§18. Miscellaneous heading services</a></li><li><a href="#SP22">§22. Headings with extension dependencies</a></li></ul><hr class="tocbar">
|
||||
|
||||
|
@ -281,7 +281,7 @@ than assist.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure contents_entry is accessed in 5/ed, 5/ec, 6/inc and here.</p>
|
||||
<p class="endnote">The structure contents_entry is accessed in 6/inc, 7/ed, 7/ec and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8"></a><b>§8. Declarations. </b>The heading tree is constructed all at once, after most of the sentence-breaking
|
||||
is done, but since a few sentences can in principle be added later, we watch
|
||||
|
@ -378,7 +378,7 @@ and cannot contain information about releasing or about virtual machines.
|
|||
|
||||
<p class="endnote">The function Headings::new_heading appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Headings::declare is used in 5/ps (<a href="5-ps.html#SP4">§4</a>).</p>
|
||||
<p class="endnote">The function Headings::declare is used in 5/ps2 (<a href="5-ps2.html#SP4">§4</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP11_1"></a><b>§11.1. </b>This implements the indentation algorithm described above.
|
||||
</p>
|
||||
|
@ -936,7 +936,7 @@ But when the following is called, we do know that.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Headings::satisfy_dependencies is used in 5/ps (<a href="5-ps.html#SP4">§4</a>).</p>
|
||||
<p class="endnote">The function Headings::satisfy_dependencies is used in 5/ps2 (<a href="5-ps2.html#SP4">§4</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP23"></a><b>§23. </b>And now the code to check an individual heading's usage. This whole
|
||||
thing is carefully timed so that we can still afford to cut up and rearrange
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
<main role="main">
|
||||
|
||||
<!--Weave of '6/inc' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#6">Chapter 6: Handling Inform Source Text</a></li><li><b>Inclusions</b></li></ul><p class="purpose">To fulfill requests to include extensions, adding their material to the parse tree as needed, and removing INCLUDE nodes.</p>
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#6">Chapter 6: Inform Source Text</a></li><li><b>Inclusions</b></li></ul><p class="purpose">To fulfill requests to include extensions, adding their material to the parse tree as needed, and removing INCLUDE nodes.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP6">§6. Extension loading</a></li><li><a href="#SP8">§8. Checking the begins here and ends here sentences</a></li></ul><hr class="tocbar">
|
||||
|
||||
|
@ -115,7 +115,7 @@ guaranteed to be no INCLUDE nodes remaining in the parse tree.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Inclusions::traverse is used in 4/em (<a href="4-em.html#SP8">§8</a>), 5/ps (<a href="5-ps.html#SP4">§4</a>).</p>
|
||||
<p class="endnote">The function Inclusions::traverse is used in 4/em (<a href="4-em.html#SP8">§8</a>), 5/ps2 (<a href="5-ps2.html#SP4">§4</a>).</p>
|
||||
|
||||
<p class="endnote">The function Inclusions::spawned_from_vertex is used in <a href="#SP1_1">§1.1</a>, <a href="#SP6_1">§6.1</a>.</p>
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>5/ps2</title>
|
||||
<title>5/ts</title>
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
@ -57,7 +57,7 @@
|
|||
<main role="main">
|
||||
|
||||
<!--Weave of '6/st' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#6">Chapter 6: Handling Inform Source Text</a></li><li><b>Source Text</b></li></ul><p class="purpose">Code for reading Inform 7 source text, which Inbuild uses for both extensions and projects.</p>
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#6">Chapter 6: Inform Source Text</a></li><li><b>Source Text</b></li></ul><p class="purpose">Code for reading Inform 7 source text, which Inbuild uses for both extensions and projects.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP10">§10. Sentence division</a></li></ul><hr class="tocbar">
|
||||
|
||||
|
@ -98,7 +98,7 @@ from multiple files and indeed from elsewhere.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function SourceText::read_file is used in 5/es (<a href="5-es.html#SP5">§5</a>), 5/ps (<a href="5-ps.html#SP4">§4</a>).</p>
|
||||
<p class="endnote">The function SourceText::read_file is used in 5/es (<a href="5-es.html#SP3">§3</a>), 5/ps2 (<a href="5-ps2.html#SP4">§4</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1_1"></a><b>§1.1. </b>This is where messages like
|
||||
</p>
|
||||
|
@ -457,7 +457,7 @@ saved up to be parsed later, so we will use the following:
|
|||
<p class="endnote">The function SourceText::new_language appears nowhere else.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><i>(This section begins Chapter 6: Handling Inform Source Text.)</i></li><li><a href="6-hdn.html">Continue with 'Headings'</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><i>(This section begins Chapter 6: Inform Source Text.)</i></li><li><a href="6-hdn.html">Continue with 'Headings'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
<main role="main">
|
||||
|
||||
<!--Weave of '6/vmg' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#6">Chapter 6: Handling Inform Source Text</a></li><li><b>Virtual Machine Grammar</b></li></ul><p class="purpose">Grammar for parsing natural language descriptions of a virtual machine.</p>
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#6">Chapter 6: Inform Source Text</a></li><li><b>Virtual Machine Grammar</b></li></ul><p class="purpose">Grammar for parsing natural language descriptions of a virtual machine.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. </b>This nonterminal corresponds to the Inbuild version number syntax in the
|
||||
arch module: for example, it matches <code class="display"><span class="extract">2.7.6</span></code> or <code class="display"><span class="extract">3/990505</span></code>.
|
||||
|
@ -102,7 +102,7 @@ with result <code class="display"><span class="extract">TRUE</span></code> if th
|
|||
<p class="inwebparagraph"></p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="6-cs.html">Back to 'Control Structures'</a></li><li><i>(This section ends Chapter 6: Handling Inform Source Text.)</i></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="6-cs.html">Back to 'Control Structures'</a></li><li><i>(This section ends Chapter 6: Inform Source Text.)</i></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>5/ed2</title>
|
||||
<title>7/ed2</title>
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
@ -56,8 +56,8 @@
|
|||
</nav>
|
||||
<main role="main">
|
||||
|
||||
<!--Weave of '5/ec' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#5">Chapter 5: Services for the Inform Compiler</a></li><li><b>Extension Census</b></li></ul><p class="purpose">To conduct a census of all the extensions installed (whether used on this run or not), and keep the documentation index for them up to date.</p>
|
||||
<!--Weave of '7/ec' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#7">Chapter 7: Extension Indexing</a></li><li><b>Extension Census</b></li></ul><p class="purpose">To conduct a census of all the extensions installed (whether used on this run or not), and keep the documentation index for them up to date.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP3_1">§3.1. Adding the extension to the census, or not</a></li><li><a href="#SP9">§9. Icons for virtual machines</a></li><li><a href="#SP10">§10. Displaying VM restrictions</a></li><li><a href="#SP11">§11. Updating the documentation</a></li><li><a href="#SP13">§13. Writing the extensions home pages</a></li></ul><hr class="tocbar">
|
||||
|
||||
|
@ -140,7 +140,7 @@ or ECD.
|
|||
|
||||
<p class="endnote">The function Extensions::Census::ecd_rubric is used in <a href="#SP6_7_4_1">§6.7.4.1</a>, <a href="#SP6_7_4_4">§6.7.4.4</a>.</p>
|
||||
|
||||
<p class="endnote">The structure extension_census_datum is accessed in 5/ed, 5/ed2, 6/hdn, 6/inc and here.</p>
|
||||
<p class="endnote">The structure extension_census_datum is accessed in 6/hdn, 6/inc, 7/ed, 7/ed2 and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>This is a narrative section and describes the story of the census. Just as
|
||||
Caesar Augustus decreed that all the world should be taxed, and that each
|
||||
|
@ -1144,7 +1144,7 @@ the usual ones seen in Mac OS X applications such as iTunes.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Extensions::Census::write_icons is used in <a href="#SP6_7_4_1_1">§6.7.4.1.1</a>, 5/ed2 (<a href="5-ed2.html#SP3_2_1_2">§3.2.1.2</a>).</p>
|
||||
<p class="endnote">The function Extensions::Census::write_icons is used in <a href="#SP6_7_4_1_1">§6.7.4.1.1</a>, 7/ed2 (<a href="7-ed2.html#SP3_2_1_2">§3.2.1.2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP11"></a><b>§11. Updating the documentation. </b>This is done in the course of taking an extension census, which is called
|
||||
for in one of two circumstances: when Inform is being run in "census mode" to
|
||||
|
@ -1328,7 +1328,7 @@ the usual ones seen in Mac OS X applications such as iTunes.
|
|||
<p class="endnote">The function Extensions::Census::write_top_level_extensions_page is used in <a href="#SP14">§14</a>.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="5-ed2.html">Back to 'Extension Documentation'</a></li><li><a href="5-ts.html">Continue with 'Template Services'</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="7-ed2.html">Back to 'Extension Documentation'</a></li><li><i>(This section ends Chapter 7: Extension Indexing.)</i></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>5/es</title>
|
||||
<title>6/vmg</title>
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
@ -56,8 +56,8 @@
|
|||
</nav>
|
||||
<main role="main">
|
||||
|
||||
<!--Weave of '5/ed' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#5">Chapter 5: Services for the Inform Compiler</a></li><li><b>Extension Dictionary</b></li></ul><p class="purpose">To maintain a database of names and constructions in all extensions so far used by this installation of Inform, and spot potential namespace clashes.</p>
|
||||
<!--Weave of '7/ed' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#7">Chapter 7: Extension Indexing</a></li><li><b>Extension Dictionary</b></li></ul><p class="purpose">To maintain a database of names and constructions in all extensions so far used by this installation of Inform, and spot potential namespace clashes.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP1">§1. Definitions</a></li><li><a href="#SP8">§8. Erasing entries</a></li><li><a href="#SP10">§10. Making new entries</a></li><li><a href="#SP11">§11. Loading from disc</a></li><li><a href="#SP13">§13. Time stamping</a></li><li><a href="#SP14">§14. Saving to disc</a></li><li><a href="#SP15">§15. Sorting the extension dictionary</a></li><li><a href="#SP17">§17. Extension clashes</a></li><li><a href="#SP20">§20. Writing the HTML extension index</a></li></ul><hr class="tocbar">
|
||||
|
||||
|
@ -119,7 +119,7 @@ than the second (the right one): see below.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure known_extension_clash is accessed in 5/ec, 6/hdn, 6/inc and here.</p>
|
||||
<p class="endnote">The structure known_extension_clash is accessed in 6/hdn, 6/inc, 7/ec and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>The extension dictionary has no natural order as such. In order to generate
|
||||
the dictionary page of the documentation, we will sort it alphabetically,
|
||||
|
@ -357,7 +357,7 @@ entries, close.
|
|||
|
||||
<p class="endnote">The function Extensions::Dictionary::filename is used in <a href="#SP14">§14</a>.</p>
|
||||
|
||||
<p class="endnote">The function Extensions::Dictionary::load is used in 5/ec (<a href="5-ec.html#SP11">§11</a>).</p>
|
||||
<p class="endnote">The function Extensions::Dictionary::load is used in 7/ec (<a href="7-ec.html#SP11">§11</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP11_1"></a><b>§11.1. </b>The extension dictionary file is stored only transiently and may never have
|
||||
been made, or may have been wiped by a zealous mobile OS. If it doesn't exist,
|
||||
|
@ -454,7 +454,7 @@ any truncated, overlong lines are ineffectual but safe.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Extensions::Dictionary::time_stamp is used in 5/ec (<a href="5-ec.html#SP6_2">§6.2</a>).</p>
|
||||
<p class="endnote">The function Extensions::Dictionary::time_stamp is used in 7/ec (<a href="7-ec.html#SP6_2">§6.2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP14"></a><b>§14. Saving to disc. </b>And inversely...
|
||||
</p>
|
||||
|
@ -485,7 +485,7 @@ any truncated, overlong lines are ineffectual but safe.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Extensions::Dictionary::write_back is used in 5/ec (<a href="5-ec.html#SP11">§11</a>).</p>
|
||||
<p class="endnote">The function Extensions::Dictionary::write_back is used in 7/ec (<a href="7-ec.html#SP11">§11</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP14_1"></a><b>§14.1. </b>We needn't worry overmuch about exceeding the maximum length, since any such
|
||||
lines are handled safely by the loading code above. In any case, they could
|
||||
|
@ -987,7 +987,7 @@ fact, the HTML rendering of the dictionary constructed above.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Extensions::Dictionary::write_to_HTML is used in 5/ec (<a href="5-ec.html#SP15">§15</a>).</p>
|
||||
<p class="endnote">The function Extensions::Dictionary::write_to_HTML is used in 7/ec (<a href="7-ec.html#SP15">§15</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP20_1"></a><b>§20.1. </b>A run of N words which are all the same should appear in tinted type
|
||||
throughout, while N(N-1)/2 clashes should be reported to the machinery above:
|
||||
|
@ -1031,7 +1031,7 @@ A vs B, A vs C, then B vs C. This has O(N^2) running time, so if there are
|
|||
<p class="endnote">This code is used in <a href="#SP20">§20</a>.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="5-es.html">Back to 'Extension Services'</a></li><li><a href="5-ed2.html">Continue with 'Extension Documentation'</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><i>(This section begins Chapter 7: Extension Indexing.)</i></li><li><a href="7-ed2.html">Continue with 'Extension Documentation'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>5/ed</title>
|
||||
<title>7/ed</title>
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
@ -56,8 +56,8 @@
|
|||
</nav>
|
||||
<main role="main">
|
||||
|
||||
<!--Weave of '5/ed2' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#5">Chapter 5: Services for the Inform Compiler</a></li><li><b>Extension Documentation</b></li></ul><p class="purpose">To generate HTML documentation for extensions.</p>
|
||||
<!--Weave of '7/ed2' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#7">Chapter 7: Extension Indexing</a></li><li><b>Extension Documentation</b></li></ul><p class="purpose">To generate HTML documentation for extensions.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. </b>Each extension gets its own page in the external documentation area, but
|
||||
this page can have two forms: the deluxe version, only produced if an
|
||||
|
@ -78,9 +78,9 @@ understand what it entails). The following routine writes both kinds of page.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Extensions::Documentation::write_detailed is used in 5/ec (<a href="5-ec.html#SP11">§11</a>).</p>
|
||||
<p class="endnote">The function Extensions::Documentation::write_detailed is used in 7/ec (<a href="7-ec.html#SP11">§11</a>).</p>
|
||||
|
||||
<p class="endnote">The function Extensions::Documentation::write_sketchy is used in 5/ec (<a href="5-ec.html#SP12">§12</a>).</p>
|
||||
<p class="endnote">The function Extensions::Documentation::write_sketchy is used in 7/ec (<a href="7-ec.html#SP12">§12</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>Thus we pass two arguments, <code class="display"><span class="extract">ecd</span></code> and <code class="display"><span class="extract">ef</span></code>, to <code class="display"><span class="extract">Extensions::Documentation::write_extension_documentation</span></code>:
|
||||
one is a valid pointer, the other null. If <code class="display"><span class="extract">ef</span></code> is valid, we can write a full
|
||||
|
@ -472,7 +472,7 @@ easily be scrolled down off screen when the user first visits the page.
|
|||
<p class="endnote">The function Extensions::Documentation::load is used in <a href="#SP3_1">§3.1</a>.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="5-ed.html">Back to 'Extension Dictionary'</a></li><li><a href="5-ec.html">Continue with 'Extension Census'</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="7-ed.html">Back to 'Extension Dictionary'</a></li><li><a href="7-ec.html">Continue with 'Extension Census'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
|
@ -149,83 +149,71 @@
|
|||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p><a name="4"></a><spon class="chaptertitle">Chapter 4: Managing Genres of Work</span></p>
|
||||
<p><a name="4"></a><spon class="chaptertitle">Chapter 4: Genre Management</span></p>
|
||||
<p><span class="purpose"></span></p>
|
||||
<ul class="sectionlist">
|
||||
<li>
|
||||
<p><a href="4-km.html"><spon class="sectiontitle">Kit Manager</span></a> -
|
||||
<span class="purpose">A kit is a combination of Inter code with an Inform 7 extension.</span></p>
|
||||
<p><a href="4-em.html"><spon class="sectiontitle">Extension Manager</span></a> -
|
||||
<span class="purpose">Claiming and creating copies of the extension genre: used for Inform 7 extensions.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="4-em.html"><spon class="sectiontitle">Extension Manager</span></a> -
|
||||
<span class="purpose">An Inform 7 extension.</span></p>
|
||||
<p><a href="4-km.html"><spon class="sectiontitle">Kit Manager</span></a> -
|
||||
<span class="purpose">Claiming and creating copies of the kit genre: used for kits of precompiled Inter code.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="4-lm.html"><spon class="sectiontitle">Language Manager</span></a> -
|
||||
<span class="purpose">A language is a combination of Inter code with an Inform 7 extension.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="4-pbm.html"><spon class="sectiontitle">Project Bundle Manager</span></a> -
|
||||
<span class="purpose">A project bundle is a folder holding an Inform 7 work. The app creates these.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="4-pfm.html"><spon class="sectiontitle">Project File Manager</span></a> -
|
||||
<span class="purpose">A project file is a plain text file of Inform 7 source text.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="4-tm.html"><spon class="sectiontitle">Template Manager</span></a> -
|
||||
<span class="purpose">A template is the outline for a website presenting an Inform work.</span></p>
|
||||
<span class="purpose">Claiming and creating copies of the language genre: used for bundles of natural language metadata in the Inform 7 compiler.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="4-pm.html"><spon class="sectiontitle">Pipeline Manager</span></a> -
|
||||
<span class="purpose">An Inform 7 pipeline.</span></p>
|
||||
<span class="purpose">Claiming and creating copies of the pipeline genre: used for pipelines of code-generation stages.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="4-pbm.html"><spon class="sectiontitle">Project Bundle Manager</span></a> -
|
||||
<span class="purpose">Claiming and creating copies of the projectbundle genre: used for Inform 7 projects as created by the GUI apps.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="4-pfm.html"><spon class="sectiontitle">Project File Manager</span></a> -
|
||||
<span class="purpose">Claiming and creating copies of the projectfile genre: used for Inform 7 source texts stored as stand-alone plain text files, outside the GUI apps.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="4-tm.html"><spon class="sectiontitle">Template Manager</span></a> -
|
||||
<span class="purpose">Claiming and creating copies of the template genre: used for website and interpreter templates when releasing an Inform project.</span></p>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p><a name="5"></a><spon class="chaptertitle">Chapter 5: Services for the Inform Compiler</span></p>
|
||||
<p><a name="5"></a><spon class="chaptertitle">Chapter 5: Genre Services</span></p>
|
||||
<p><span class="purpose"></span></p>
|
||||
<ul class="sectionlist">
|
||||
<li>
|
||||
<p><a href="5-kts.html"><spon class="sectiontitle">Kits</span></a> -
|
||||
<span class="purpose">A kit is a combination of Inter code with an Inform 7 extension.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="5-es.html"><spon class="sectiontitle">Extension Services</span></a> -
|
||||
<span class="purpose">An Inform 7 extension.</span></p>
|
||||
<span class="purpose">Behaviour specific to copies of the extension genre.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="5-ed.html"><spon class="sectiontitle">Extension Dictionary</span></a> -
|
||||
<span class="purpose">To maintain a database of names and constructions in all extensions so far used by this installation of Inform, and spot potential namespace clashes.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="5-ed2.html"><spon class="sectiontitle">Extension Documentation</span></a> -
|
||||
<span class="purpose">To generate HTML documentation for extensions.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="5-ec.html"><spon class="sectiontitle">Extension Census</span></a> -
|
||||
<span class="purpose">To conduct a census of all the extensions installed (whether used on this run or not), and keep the documentation index for them up to date.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="5-ts.html"><spon class="sectiontitle">Template Services</span></a> -
|
||||
<span class="purpose">An Inform 7 website template.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="5-ps.html"><spon class="sectiontitle">Project Services</span></a> -
|
||||
<span class="purpose">An Inform 7 project.</span></p>
|
||||
<p><a href="5-kts.html"><spon class="sectiontitle">Kits</span></a> -
|
||||
<span class="purpose">Behaviour specific to copies of the kit genre.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="5-ls.html"><spon class="sectiontitle">Language Services</span></a> -
|
||||
<span class="purpose">An Inform 7 language definition bundle.</span></p>
|
||||
<span class="purpose">Behaviour specific to copies of the language genre.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="5-ps2.html"><spon class="sectiontitle">Pipeline Services</span></a> -
|
||||
<span class="purpose">A pipeline is a list of steps to be followed by the Inter processor forming the back end of the Inform compiler.</span></p>
|
||||
<p><a href="5-ps.html"><spon class="sectiontitle">Pipeline Services</span></a> -
|
||||
<span class="purpose">Behaviour specific to copies of the pipeline genre.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="5-ps2.html"><spon class="sectiontitle">Project Services</span></a> -
|
||||
<span class="purpose">Behaviour specific to copies of either the projectbundle or projectfile genres.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="5-ts.html"><spon class="sectiontitle">Template Services</span></a> -
|
||||
<span class="purpose">Behaviour specific to copies of the template genre.</span></p>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p><a name="6"></a><spon class="chaptertitle">Chapter 6: Handling Inform Source Text</span></p>
|
||||
<p><a name="6"></a><spon class="chaptertitle">Chapter 6: Inform Source Text</span></p>
|
||||
<p><span class="purpose"></span></p>
|
||||
<ul class="sectionlist">
|
||||
<li>
|
||||
|
@ -250,6 +238,24 @@
|
|||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p><a name="7"></a><spon class="chaptertitle">Chapter 7: Extension Indexing</span></p>
|
||||
<p><span class="purpose"></span></p>
|
||||
<ul class="sectionlist">
|
||||
<li>
|
||||
<p><a href="7-ed.html"><spon class="sectiontitle">Extension Dictionary</span></a> -
|
||||
<span class="purpose">To maintain a database of names and constructions in all extensions so far used by this installation of Inform, and spot potential namespace clashes.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="7-ed2.html"><spon class="sectiontitle">Extension Documentation</span></a> -
|
||||
<span class="purpose">To generate HTML documentation for extensions.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="7-ec.html"><spon class="sectiontitle">Extension Census</span></a> -
|
||||
<span class="purpose">To conduct a census of all the extensions installed (whether used on this run or not), and keep the documentation index for them up to date.</span></p>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<hr>
|
||||
|
||||
|
|
|
@ -147,7 +147,7 @@
|
|||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sf</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) { </span><span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"File has failed to open\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="reserved">return</span><span class="plain">; }</span>
|
||||
<span class="identifier">syntax_tree</span><span class="plain"> = </span><span class="functiontext">ParseTree::new_tree</span><span class="plain">();</span>
|
||||
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"Read %d words\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="functiontext">Wordings::length</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">));</span>
|
||||
<span class="functiontext">Sentences::break</span><span class="plain">(</span><span class="identifier">syntax_tree</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, -1);</span>
|
||||
<span class="functiontext">Sentences::break</span><span class="plain">(</span><span class="identifier">syntax_tree</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">save_DL</span><span class="plain"> = </span><span class="identifier">DL</span><span class="plain">;</span>
|
||||
<span class="identifier">DL</span><span class="plain"> = </span><span class="constant">STDOUT</span><span class="plain">;</span>
|
||||
|
|
|
@ -93,7 +93,7 @@
|
|||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sf</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) { </span><span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"File has failed to open\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="reserved">return</span><span class="plain">; }</span>
|
||||
<span class="identifier">syntax_tree</span><span class="plain"> = </span><span class="functiontext">ParseTree::new_tree</span><span class="plain">();</span>
|
||||
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"Read %d words\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="functiontext">Wordings::length</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">));</span>
|
||||
<span class="functiontext">Sentences::break</span><span class="plain">(</span><span class="identifier">syntax_tree</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, -1);</span>
|
||||
<span class="functiontext">Sentences::break</span><span class="plain">(</span><span class="identifier">syntax_tree</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
|
||||
|
||||
<span class="functiontext">ParseTree::traverse</span><span class="plain">(</span><span class="identifier">syntax_tree</span><span class="plain">, </span><span class="functiontext">Unit::scan_tree</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
|
|
@ -133,10 +133,16 @@ is probably a phrase, and so on — and the following is its state.
|
|||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">sfsm_in_tabbed_mode</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">sfsm_main_source_start_wn</span><span class="plain"> = -1;</span>
|
||||
<span class="constant">COPY_FILE_TYPE</span><span class="plain"> *</span><span class="identifier">sfsm_copy</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="functiontext">Sentences::set_start_of_source</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">wn</span><span class="plain">) {</span>
|
||||
<span class="identifier">sfsm_main_source_start_wn</span><span class="plain"> = </span><span class="identifier">wn</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Sentences::set_start_of_source appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b>Now for the routine itself. We break into bite-sized chunks, each of which is
|
||||
despatched to the <code class="display"><span class="extract">Sentences::make_node</span></code> routine with a note of the punctuation
|
||||
which was used to end it. Each call to this routine represents one cycle of our
|
||||
|
@ -145,8 +151,17 @@ finite state machine.
|
|||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Sentences::break</span><span class="plain">(</span><span class="reserved">parse_node_tree</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">is_extension</span><span class="plain">,</span>
|
||||
<span class="constant">COPY_FILE_TYPE</span><span class="plain"> *</span><span class="identifier">from_copy</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">bwc</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Sentences::break</span><span class="plain">(</span><span class="reserved">parse_node_tree</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Sentences::break_inner</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">W</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="plain">}</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Sentences::break_into_project_copy</span><span class="plain">(</span><span class="reserved">parse_node_tree</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">, </span><span class="constant">COPY_FILE_TYPE</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Sentences::break_inner</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Sentences::break_into_extension_copy</span><span class="plain">(</span><span class="reserved">parse_node_tree</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">, </span><span class="constant">COPY_FILE_TYPE</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Sentences::break_inner</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Sentences::break_inner</span><span class="plain">(</span><span class="reserved">parse_node_tree</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">is_extension</span><span class="plain">, </span><span class="constant">COPY_FILE_TYPE</span><span class="plain"> *</span><span class="identifier">from_copy</span><span class="plain">) {</span>
|
||||
<span class="reserved">while</span><span class="plain"> (((</span><span class="identifier">Wordings::nonempty</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">))) && (</span><span class="identifier">compare_word</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">), </span><span class="identifier">PARBREAK_V</span><span class="plain">)))</span>
|
||||
<span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Wordings::trim_first_word</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::empty</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
|
@ -190,6 +205,12 @@ finite state machine.
|
|||
|
||||
<p class="endnote">The function Sentences::break appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Sentences::break_into_project_copy appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Sentences::break_into_extension_copy appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Sentences::break_inner appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5_1"></a><b>§5.1. </b>Each call to <code class="display"><span class="extract">Sentences::break</span></code> starts afresh, with no residual state
|
||||
left over from previous calls. (The same cannot be said for <code class="display"><span class="extract">Sentences::make_node</span></code>,
|
||||
which constructs individual sentences and is repeatedly called by us, and
|
||||
|
@ -209,7 +230,6 @@ that is why these are global variables rather than locals in <code class="displa
|
|||
<span class="identifier">sfsm_copy</span><span class="plain"> = </span><span class="identifier">from_copy</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">is_extension</span><span class="plain">) </span><span class="identifier">sfsm_extension_position</span><span class="plain"> = 1;</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">sfsm_extension_position</span><span class="plain"> = 0;</span>
|
||||
<span class="identifier">sfsm_main_source_start_wn</span><span class="plain"> = </span><span class="identifier">bwc</span><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
|
|
@ -72,7 +72,7 @@
|
|||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sf</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) { </span><span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"File has failed to open\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="reserved">return</span><span class="plain">; }</span>
|
||||
<span class="identifier">syntax_tree</span><span class="plain"> = </span><span class="functiontext">ParseTree::new_tree</span><span class="plain">();</span>
|
||||
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"Read %d words\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="functiontext">Wordings::length</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">));</span>
|
||||
<span class="functiontext">Sentences::break</span><span class="plain">(</span><span class="identifier">syntax_tree</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, -1);</span>
|
||||
<span class="functiontext">Sentences::break</span><span class="plain">(</span><span class="identifier">syntax_tree</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">save_DL</span><span class="plain"> = </span><span class="identifier">DL</span><span class="plain">;</span>
|
||||
<span class="identifier">DL</span><span class="plain"> = </span><span class="constant">STDOUT</span><span class="plain">;</span>
|
||||
|
|
|
@ -22,7 +22,7 @@ at which time the client can freely use its facilities.
|
|||
@e NESTED_INBUILD_PHASE
|
||||
@e PROJECTED_INBUILD_PHASE
|
||||
@e TARGETED_INBUILD_PHASE
|
||||
@e GOING_OPERATIONAL_INBUILD_PHASE
|
||||
@e GRAPH_CONSTRUCTION_INBUILD_PHASE
|
||||
@e OPERATIONAL_INBUILD_PHASE
|
||||
|
||||
@ We're going to use the following assertions to make sure we don't slip up.
|
||||
|
@ -370,7 +370,7 @@ void Inbuild::set_current_vm(target_vm *VM) {
|
|||
current_target_VM = VM;
|
||||
}
|
||||
|
||||
@h The Going Operational and Operational phases.
|
||||
@h The Graph Construction and Operational phases.
|
||||
|inbuild| is now in the Targeted phase, then, meaning that the client has
|
||||
called |Inbuild::optioneering_complete| and has been making further
|
||||
preparations of its own. (For example, it could attach further kit
|
||||
|
@ -378,20 +378,20 @@ dependencies to the shared project.) The client has one further duty to
|
|||
perform: to call |Inbuild::go_operational|. After that, everything is ready
|
||||
for use.
|
||||
|
||||
The brief "going operational" phase is used, for example, to build out
|
||||
dependency graphs. We do that copy by copy. The shared project, if there is
|
||||
one, goes first; then everything else known to us.
|
||||
The brief "graph construction" phase is used to build out dependency graphs.
|
||||
We do that copy by copy. The shared project, if there is one, goes first;
|
||||
then everything else known to us.
|
||||
|
||||
=
|
||||
inform_project *Inbuild::go_operational(void) {
|
||||
RUN_ONLY_IN_PHASE(TARGETED_INBUILD_PHASE)
|
||||
inbuild_phase = GOING_OPERATIONAL_INBUILD_PHASE;
|
||||
inbuild_phase = GRAPH_CONSTRUCTION_INBUILD_PHASE;
|
||||
inform_project *P = Inbuild::project();
|
||||
if (P) Copies::go_operational(P->as_copy);
|
||||
if (P) Copies::construct_graph(P->as_copy);
|
||||
inbuild_copy *C;
|
||||
LOOP_OVER(C, inbuild_copy)
|
||||
if ((P == NULL) || (C != P->as_copy))
|
||||
Copies::go_operational(C);
|
||||
Copies::construct_graph(C);
|
||||
inbuild_phase = OPERATIONAL_INBUILD_PHASE;
|
||||
if (census_mode) Extensions::Census::handle_census_mode();
|
||||
return Inbuild::project();
|
||||
|
|
|
@ -117,8 +117,8 @@ wording Copies::get_source_text(inbuild_copy *C) {
|
|||
@h Going operational.
|
||||
|
||||
=
|
||||
void Copies::go_operational(inbuild_copy *C) {
|
||||
VMETHOD_CALL(C->edition->work->genre, GENRE_GO_OPERATIONAL_MTID, C);
|
||||
void Copies::construct_graph(inbuild_copy *C) {
|
||||
VMETHOD_CALL(C->edition->work->genre, GENRE_CONSTRUCT_GRAPH_MTID, C);
|
||||
}
|
||||
|
||||
@h Miscellaneous Inbuild commands.
|
||||
|
|
|
@ -108,13 +108,16 @@ is scanned for metadata during claiming, only the opening line is looked at.)
|
|||
This method should exist only for such genres, and it should read the source
|
||||
text. It will never be called twice on the same copy.
|
||||
|
||||
Text should actually be read by feeding it into the lexer. Inbuild will take
|
||||
of it from there.
|
||||
|
||||
@e GENRE_READ_SOURCE_TEXT_FOR_MTID
|
||||
|
||||
=
|
||||
VMETHOD_TYPE(GENRE_READ_SOURCE_TEXT_FOR_MTID,
|
||||
inbuild_genre *gen, inbuild_copy *C)
|
||||
|
||||
@ At the Going Operational phase of Inbuild, each copy is offered the chance
|
||||
@ At the Graph Construction phase of Inbuild, each copy is offered the chance
|
||||
to finalise its internal representation. For example, this may be when its
|
||||
build graph is constructed, because we can now know for sure that there are
|
||||
no further unsuspected dependencies.
|
||||
|
@ -122,13 +125,10 @@ no further unsuspected dependencies.
|
|||
This method is optional, and is called exactly once on every copy (whose genre
|
||||
provides it) which has been claimed by Inbuild.
|
||||
|
||||
Text should actually be read by feeding it into the lexer. Inbuild will take
|
||||
of it from there.
|
||||
|
||||
@e GENRE_GO_OPERATIONAL_MTID
|
||||
@e GENRE_CONSTRUCT_GRAPH_MTID
|
||||
|
||||
=
|
||||
VMETHOD_TYPE(GENRE_GO_OPERATIONAL_MTID,
|
||||
VMETHOD_TYPE(GENRE_CONSTRUCT_GRAPH_MTID,
|
||||
inbuild_genre *gen, inbuild_copy *C)
|
||||
|
||||
@ This method is called when a copy is about to be built or have its graph
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
[ExtensionManager::] Extension Manager.
|
||||
|
||||
An Inform 7 extension.
|
||||
Claiming and creating copies of the extension genre: used for Inform 7
|
||||
extensions.
|
||||
|
||||
@h Genre definition.
|
||||
The |extension_genre| can be summarised as follows. Copies consist of single
|
||||
|
@ -9,6 +10,12 @@ stored in nests, in |N/Extensions/Author/Title-vVersion.i7x|. Their build
|
|||
graphs are a single vertex with no build edges, but with use edges to any
|
||||
further extensions which they Include.
|
||||
|
||||
It may seem surprising that we do not provide a |GENRE_CONSTRUCT_GRAPH_MTID|
|
||||
method. This is for efficiency reasons: we don't want to read and parse the
|
||||
source text of every extension we ever see, and that's what would be needed
|
||||
to make the graphs of every such extension. Instead we build out the graph
|
||||
later on, as needed, just for extensions of interest: see below.
|
||||
|
||||
@ =
|
||||
void ExtensionManager::start(void) {
|
||||
extension_genre = Genres::new(I"extension", TRUE);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
[KitManager::] Kit Manager.
|
||||
|
||||
A kit is a combination of Inter code with an Inform 7 extension.
|
||||
Claiming and creating copies of the kit genre: used for kits of precompiled
|
||||
Inter code.
|
||||
|
||||
@h Genre definition.
|
||||
The |kit_genre| can be summarised as follows. Kits consist of directories,
|
||||
|
@ -19,7 +20,7 @@ void KitManager::start(void) {
|
|||
METHOD_ADD(kit_genre, GENRE_CLAIM_AS_COPY_MTID, KitManager::claim_as_copy);
|
||||
METHOD_ADD(kit_genre, GENRE_SEARCH_NEST_FOR_MTID, KitManager::search_nest_for);
|
||||
METHOD_ADD(kit_genre, GENRE_COPY_TO_NEST_MTID, KitManager::copy_to_nest);
|
||||
METHOD_ADD(kit_genre, GENRE_GO_OPERATIONAL_MTID, KitManager::go_operational);
|
||||
METHOD_ADD(kit_genre, GENRE_CONSTRUCT_GRAPH_MTID, KitManager::construct_graph);
|
||||
METHOD_ADD(kit_genre, GENRE_BUILDING_SOON_MTID, KitManager::building_soon);
|
||||
}
|
||||
|
||||
|
@ -177,6 +178,6 @@ void KitManager::building_soon(inbuild_genre *gen, inbuild_copy *C, build_vertex
|
|||
*V = C->vertex;
|
||||
}
|
||||
|
||||
void KitManager::go_operational(inbuild_genre *G, inbuild_copy *C) {
|
||||
void KitManager::construct_graph(inbuild_genre *G, inbuild_copy *C) {
|
||||
Kits::construct_graph(KitManager::from_copy(C));
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
[LanguageManager::] Language Manager.
|
||||
|
||||
A language is a combination of Inter code with an Inform 7 extension.
|
||||
Claiming and creating copies of the language genre: used for bundles of
|
||||
natural language metadata in the Inform 7 compiler.
|
||||
|
||||
@h Genre definition.
|
||||
The |language_genre| can be summarised as follows. Language definitions
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
[PipelineManager::] Pipeline Manager.
|
||||
|
||||
An Inform 7 pipeline.
|
||||
Claiming and creating copies of the pipeline genre: used for pipelines of
|
||||
code-generation stages.
|
||||
|
||||
@h Genre definition.
|
||||
The |pipeline_genre| can be summarised as follows. Copies consist of single
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
[ProjectBundleManager::] Project Bundle Manager.
|
||||
|
||||
A project bundle is a folder holding an Inform 7 work. The app creates these.
|
||||
Claiming and creating copies of the projectbundle genre: used for Inform 7
|
||||
projects as created by the GUI apps.
|
||||
|
||||
@h Genre definition.
|
||||
The |project_bundle_genre| can be summarised as follows. Copies consist of
|
||||
|
@ -23,7 +24,7 @@ void ProjectBundleManager::start(void) {
|
|||
METHOD_ADD(project_bundle_genre, GENRE_CLAIM_AS_COPY_MTID, ProjectBundleManager::claim_as_copy);
|
||||
METHOD_ADD(project_bundle_genre, GENRE_SEARCH_NEST_FOR_MTID, ProjectBundleManager::search_nest_for);
|
||||
METHOD_ADD(project_bundle_genre, GENRE_COPY_TO_NEST_MTID, ProjectBundleManager::copy_to_nest);
|
||||
METHOD_ADD(project_bundle_genre, GENRE_GO_OPERATIONAL_MTID, ProjectBundleManager::go_operational);
|
||||
METHOD_ADD(project_bundle_genre, GENRE_CONSTRUCT_GRAPH_MTID, ProjectBundleManager::construct_graph);
|
||||
METHOD_ADD(project_bundle_genre, GENRE_READ_SOURCE_TEXT_FOR_MTID, ProjectBundleManager::read_source_text_for);
|
||||
METHOD_ADD(project_bundle_genre, GENRE_BUILDING_SOON_MTID, ProjectBundleManager::building_soon);
|
||||
}
|
||||
|
@ -105,7 +106,7 @@ void ProjectBundleManager::building_soon(inbuild_genre *gen, inbuild_copy *C, bu
|
|||
*V = project->chosen_build_target;
|
||||
}
|
||||
|
||||
void ProjectBundleManager::go_operational(inbuild_genre *G, inbuild_copy *C) {
|
||||
void ProjectBundleManager::construct_graph(inbuild_genre *G, inbuild_copy *C) {
|
||||
Projects::construct_graph(ProjectBundleManager::from_copy(C));
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
[ProjectFileManager::] Project File Manager.
|
||||
|
||||
A project file is a plain text file of Inform 7 source text.
|
||||
Claiming and creating copies of the projectfile genre: used for Inform 7
|
||||
source texts stored as stand-alone plain text files, outside the GUI apps.
|
||||
|
||||
@h Genre definition.
|
||||
The |project_file_genre| can be summarised as follows. Copies consist of
|
||||
|
@ -21,7 +22,7 @@ void ProjectFileManager::start(void) {
|
|||
METHOD_ADD(project_file_genre, GENRE_CLAIM_AS_COPY_MTID, ProjectFileManager::claim_as_copy);
|
||||
METHOD_ADD(project_file_genre, GENRE_SEARCH_NEST_FOR_MTID, ProjectFileManager::search_nest_for);
|
||||
METHOD_ADD(project_file_genre, GENRE_COPY_TO_NEST_MTID, ProjectFileManager::copy_to_nest);
|
||||
METHOD_ADD(project_file_genre, GENRE_GO_OPERATIONAL_MTID, ProjectFileManager::go_operational);
|
||||
METHOD_ADD(project_file_genre, GENRE_CONSTRUCT_GRAPH_MTID, ProjectFileManager::construct_graph);
|
||||
METHOD_ADD(project_file_genre, GENRE_READ_SOURCE_TEXT_FOR_MTID, ProjectFileManager::read_source_text_for);
|
||||
METHOD_ADD(project_file_genre, GENRE_BUILDING_SOON_MTID, ProjectFileManager::building_soon);
|
||||
}
|
||||
|
@ -106,7 +107,7 @@ void ProjectFileManager::building_soon(inbuild_genre *gen, inbuild_copy *C, buil
|
|||
*V = project->chosen_build_target;
|
||||
}
|
||||
|
||||
void ProjectFileManager::go_operational(inbuild_genre *G, inbuild_copy *C) {
|
||||
void ProjectFileManager::construct_graph(inbuild_genre *G, inbuild_copy *C) {
|
||||
Projects::construct_graph(ProjectFileManager::from_copy(C));
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
[TemplateManager::] Template Manager.
|
||||
|
||||
A template is the outline for a website presenting an Inform work.
|
||||
Claiming and creating copies of the template genre: used for website and
|
||||
interpreter templates when releasing an Inform project.
|
||||
|
||||
@h Genre definition.
|
||||
The |template_genre| can be summarised as follows. Website templates
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
[Extensions::] Extension Services.
|
||||
|
||||
An Inform 7 extension.
|
||||
Behaviour specific to copies of the extension genre.
|
||||
|
||||
@ An extension has a title and an author name, each of which is limited in
|
||||
@h Scanning metadata.
|
||||
An extension has a title and an author name, each of which is limited in
|
||||
length to one character less than the following constants:
|
||||
|
||||
@d MAX_EXTENSION_TITLE_LENGTH 51
|
||||
|
@ -26,10 +27,30 @@ typedef struct inform_extension {
|
|||
MEMORY_MANAGEMENT
|
||||
} inform_extension;
|
||||
|
||||
@ This is called as soon as a new copy |C| of the extension genre is created.
|
||||
We scan the extension file for the title, author, version number and any
|
||||
compatibility notes given (such as "for Glulx only").
|
||||
|
||||
=
|
||||
void Extensions::scan(inbuild_copy *C) {
|
||||
inform_extension *E = CREATE(inform_extension);
|
||||
E->as_copy = C;
|
||||
Copies::set_content(C, STORE_POINTER_inform_extension(E));
|
||||
@<Initialise the extension docket@>;
|
||||
|
||||
TEMPORARY_TEXT(claimed_author_name);
|
||||
TEMPORARY_TEXT(claimed_title);
|
||||
TEMPORARY_TEXT(reqs);
|
||||
semantic_version_number V = VersionNumbers::null();
|
||||
@<Scan the file@>;
|
||||
@<Change the edition of the copy in light of the metadata found in the scan@>;
|
||||
Works::add_to_database(C->edition->work, CLAIMED_WDBC);
|
||||
DISCARD_TEXT(claimed_author_name);
|
||||
DISCARD_TEXT(claimed_title);
|
||||
DISCARD_TEXT(reqs);
|
||||
}
|
||||
|
||||
@<Initialise the extension docket@> =
|
||||
E->body_text = EMPTY_WORDING;
|
||||
E->body_text_unbroken = FALSE;
|
||||
E->documentation_text = EMPTY_WORDING;
|
||||
|
@ -43,37 +64,6 @@ void Extensions::scan(inbuild_copy *C) {
|
|||
E->syntax_tree = ParseTree::new_tree();
|
||||
E->inclusion_sentence = NULL;
|
||||
|
||||
TEMPORARY_TEXT(claimed_author_name);
|
||||
TEMPORARY_TEXT(claimed_title);
|
||||
TEMPORARY_TEXT(reqs);
|
||||
filename *F = C->location_if_file;
|
||||
semantic_version_number V = VersionNumbers::null();
|
||||
@<Scan the file@>;
|
||||
if (Str::len(claimed_title) == 0) { WRITE_TO(claimed_title, "Unknown"); }
|
||||
if (Str::len(claimed_author_name) == 0) { WRITE_TO(claimed_author_name, "Anonymous"); }
|
||||
if (Str::len(claimed_title) > MAX_EXTENSION_TITLE_LENGTH) {
|
||||
Copies::attach_error(C, CopyErrors::new_N(EXT_TITLE_TOO_LONG_CE, -1, Str::len(claimed_title)));
|
||||
}
|
||||
if (Str::len(claimed_author_name) > MAX_EXTENSION_AUTHOR_LENGTH) {
|
||||
Copies::attach_error(C, CopyErrors::new_N(EXT_AUTHOR_TOO_LONG_CE, -1, Str::len(claimed_author_name)));
|
||||
}
|
||||
C->edition = Editions::new(Works::new(extension_genre, claimed_title, claimed_author_name), V);
|
||||
if (Str::len(reqs) > 0) {
|
||||
compatibility_specification *CS = Compatibility::from_text(reqs);
|
||||
if (CS) C->edition->compatibility = CS;
|
||||
else {
|
||||
TEMPORARY_TEXT(err);
|
||||
WRITE_TO(err, "cannot read compatibility '%S'", reqs);
|
||||
Copies::attach_error(C, CopyErrors::new_T(EXT_MISWORDED_CE, -1, err));
|
||||
DISCARD_TEXT(err);
|
||||
}
|
||||
}
|
||||
Works::add_to_database(C->edition->work, CLAIMED_WDBC);
|
||||
DISCARD_TEXT(claimed_author_name);
|
||||
DISCARD_TEXT(claimed_title);
|
||||
DISCARD_TEXT(reqs);
|
||||
}
|
||||
|
||||
@ The following scans a potential extension file. If it seems malformed, a
|
||||
suitable error is written to the stream |error_text|. If not, this is left
|
||||
alone, and the version number is returned.
|
||||
|
@ -82,6 +72,7 @@ alone, and the version number is returned.
|
|||
@<Scan the file@> =
|
||||
TEMPORARY_TEXT(titling_line);
|
||||
TEMPORARY_TEXT(version_text);
|
||||
filename *F = C->location_if_file;
|
||||
FILE *EXTF = Filenames::fopen_caseless(F, "r");
|
||||
if (EXTF == NULL) {
|
||||
Copies::attach_error(C, CopyErrors::new_F(OPEN_FAILED_CE, -1, F));
|
||||
|
@ -198,7 +189,121 @@ this is unambiguous.
|
|||
Str::copy(reqs, mr.exp[1]);
|
||||
}
|
||||
|
||||
@ =
|
||||
@ Note that we don't attempt to modify the |inbuild_work| structure inside
|
||||
the edition; we create an entirely new |inbuild_work|. That's because they
|
||||
are immutable, and need to be for the extensions dictionary to work.
|
||||
|
||||
@<Change the edition of the copy in light of the metadata found in the scan@> =
|
||||
if (Str::len(claimed_title) == 0) { WRITE_TO(claimed_title, "Unknown"); }
|
||||
if (Str::len(claimed_author_name) == 0) { WRITE_TO(claimed_author_name, "Anonymous"); }
|
||||
if (Str::len(claimed_title) > MAX_EXTENSION_TITLE_LENGTH) {
|
||||
Copies::attach_error(C, CopyErrors::new_N(EXT_TITLE_TOO_LONG_CE, -1, Str::len(claimed_title)));
|
||||
}
|
||||
if (Str::len(claimed_author_name) > MAX_EXTENSION_AUTHOR_LENGTH) {
|
||||
Copies::attach_error(C, CopyErrors::new_N(EXT_AUTHOR_TOO_LONG_CE, -1, Str::len(claimed_author_name)));
|
||||
}
|
||||
C->edition = Editions::new(Works::new(extension_genre, claimed_title, claimed_author_name), V);
|
||||
if (Str::len(reqs) > 0) {
|
||||
compatibility_specification *CS = Compatibility::from_text(reqs);
|
||||
if (CS) C->edition->compatibility = CS;
|
||||
else {
|
||||
TEMPORARY_TEXT(err);
|
||||
WRITE_TO(err, "cannot read compatibility '%S'", reqs);
|
||||
Copies::attach_error(C, CopyErrors::new_T(EXT_MISWORDED_CE, -1, err));
|
||||
DISCARD_TEXT(err);
|
||||
}
|
||||
}
|
||||
|
||||
@h Read source text.
|
||||
The scan only skimmed the surface of the file, and didn't try to parse it as
|
||||
natural language text with Preform. But if the extension turns out to be one
|
||||
that we need to use for something, we'll need to read its full text eventually.
|
||||
This is that time.
|
||||
|
||||
=
|
||||
void Extensions::read_source_text_for(inform_extension *E) {
|
||||
filename *F = E->as_copy->location_if_file;
|
||||
int doc_only = FALSE;
|
||||
if (census_mode) doc_only = TRUE;
|
||||
TEMPORARY_TEXT(synopsis);
|
||||
@<Concoct a synopsis for the extension to be read@>;
|
||||
E->read_into_file = SourceText::read_file(E->as_copy, F, synopsis, doc_only, FALSE);
|
||||
DISCARD_TEXT(synopsis);
|
||||
if (E->read_into_file) {
|
||||
E->read_into_file->your_ref = STORE_POINTER_inbuild_copy(E->as_copy);
|
||||
@<Break the text into sentences@>;
|
||||
E->body_text_unbroken = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
@ We concoct a textual synopsis in the form
|
||||
|
||||
|"Pantomime Sausages by Mr Punch"|
|
||||
|
||||
to be used by |SourceFiles::read_extension_source_text| for printing to |stdout|. Since
|
||||
we dare not assume |stdout| can manage characters outside the basic ASCII
|
||||
range, we flatten them from general ISO to plain ASCII.
|
||||
|
||||
@<Concoct a synopsis for the extension to be read@> =
|
||||
WRITE_TO(synopsis, "%S by %S",
|
||||
E->as_copy->edition->work->title,
|
||||
E->as_copy->edition->work->author_name);
|
||||
LOOP_THROUGH_TEXT(pos, synopsis)
|
||||
Str::put(pos,
|
||||
Characters::make_filename_safe(Str::get(pos)));
|
||||
|
||||
@ Note that if there is an active project, then we are reading the extension
|
||||
in order to include it in that, and so we send it to the project's syntax tree,
|
||||
rather than to the extension's own one. But if we are simply examining the
|
||||
extension by running |-graph| on it in the Inbuild command line, for example,
|
||||
then its sentences will go to the extension's own tree.
|
||||
|
||||
@<Break the text into sentences@> =
|
||||
wording EXW = E->read_into_file->text_read;
|
||||
if (Wordings::nonempty(EXW))
|
||||
@<Break the extension's text into body and documentation@>;
|
||||
inform_project *project = Inbuild::project();
|
||||
if (project) E->syntax_tree = project->syntax_tree;
|
||||
Sentences::break_into_extension_copy(E->syntax_tree, E->body_text, E->as_copy);
|
||||
E->body_text_unbroken = FALSE;
|
||||
|
||||
@ If an extension file contains the special text (outside literal mode) of
|
||||
|
||||
|---- Documentation ----|
|
||||
|
||||
then this is taken as the end of the Inform source, and the beginning of a
|
||||
snippet of documentation about the extension; text from that point on is
|
||||
saved until later, but not broken into sentences for the parse tree, and it
|
||||
is therefore invisible to the rest of Inform. If this division line is not
|
||||
present then the extension contains only body source and no documentation.
|
||||
|
||||
=
|
||||
<extension-body> ::=
|
||||
*** ---- documentation ---- ... | ==> TRUE
|
||||
... ==> FALSE
|
||||
|
||||
@<Break the extension's text into body and documentation@> =
|
||||
<extension-body>(EXW);
|
||||
E->body_text = GET_RW(<extension-body>, 1);
|
||||
if (<<r>>) E->documentation_text = GET_RW(<extension-body>, 2);
|
||||
E->body_text_unbroken = TRUE; /* mark this to be sentence-broken */
|
||||
|
||||
@ When the extension source text was read from its |source_file|, we
|
||||
attached a reference to say which |inform_extension| it was, and here we
|
||||
make use of that:
|
||||
|
||||
=
|
||||
inform_extension *Extensions::corresponding_to(source_file *sf) {
|
||||
if (sf == NULL) return NULL;
|
||||
inbuild_copy *C = RETRIEVE_POINTER_inbuild_copy(sf->your_ref);
|
||||
if (C == NULL) return NULL;
|
||||
if (C->edition->work->genre != extension_genre) return NULL;
|
||||
return ExtensionManager::from_copy(C);
|
||||
}
|
||||
|
||||
@h Miscellaneous.
|
||||
|
||||
=
|
||||
void Extensions::write(OUTPUT_STREAM, inform_extension *E) {
|
||||
if (E == NULL) WRITE("none");
|
||||
else WRITE("%X", E->as_copy->edition->work);
|
||||
|
@ -212,8 +317,8 @@ void Extensions::write_author_to_file(inform_extension *E, OUTPUT_STREAM) {
|
|||
WRITE("%S", E->as_copy->edition->work->raw_author_name);
|
||||
}
|
||||
|
||||
@ Three pieces of information (not available when the EF is created) will
|
||||
be set later on, by other parts of Inform calling the routines below.
|
||||
@ Three pieces of information will be set later on, by other parts of Inform
|
||||
calling the routines below.
|
||||
|
||||
The rubric text for an extension, which is double-quoted matter just below
|
||||
its "begins here" line, is parsed as a sentence and will be read as an
|
||||
|
@ -252,7 +357,9 @@ void Extensions::set_authorial_modesty(inform_extension *E) {
|
|||
if (E == NULL) internal_error("unfound ef");
|
||||
E->authorial_modesty = TRUE;
|
||||
}
|
||||
void Extensions::set_general_authorial_modesty(void) { general_authorial_modesty = TRUE; }
|
||||
void Extensions::set_general_authorial_modesty(void) {
|
||||
general_authorial_modesty = TRUE;
|
||||
}
|
||||
|
||||
void Extensions::set_inclusion_sentence(inform_extension *E, parse_node *N) {
|
||||
E->inclusion_sentence = N;
|
||||
|
@ -273,79 +380,10 @@ void Extensions::make_standard(inform_extension *E) {
|
|||
|
||||
void Extensions::must_satisfy(inform_extension *E, inbuild_requirement *req) {
|
||||
if (E->must_satisfy == NULL) E->must_satisfy = req;
|
||||
else if (VersionNumberRanges::intersect_range(E->must_satisfy->version_range, req->version_range)) {
|
||||
#ifdef CORE_MODULE
|
||||
Extensions::set_inclusion_sentence(E, current_sentence);
|
||||
#endif
|
||||
}
|
||||
else VersionNumberRanges::intersect_range(E->must_satisfy->version_range, req->version_range);
|
||||
}
|
||||
|
||||
int Extensions::satisfies(inform_extension *E) {
|
||||
if (E == NULL) return FALSE;
|
||||
return Requirements::meets(E->as_copy->edition, E->must_satisfy);
|
||||
}
|
||||
|
||||
@
|
||||
|
||||
=
|
||||
void Extensions::read_source_text_for(inform_extension *E) {
|
||||
filename *F = E->as_copy->location_if_file;
|
||||
int doc_only = FALSE;
|
||||
if (census_mode) doc_only = TRUE;
|
||||
TEMPORARY_TEXT(synopsis);
|
||||
@<Concoct a synopsis for the extension to be read@>;
|
||||
E->read_into_file = SourceText::read_file(E->as_copy, F, synopsis, doc_only, FALSE);
|
||||
DISCARD_TEXT(synopsis);
|
||||
if (E->read_into_file) {
|
||||
E->read_into_file->your_ref = STORE_POINTER_inbuild_copy(E->as_copy);
|
||||
wording EXW = E->read_into_file->text_read;
|
||||
if (Wordings::nonempty(EXW)) @<Break the extension's text into body and documentation@>;
|
||||
inform_project *project = Inbuild::project();
|
||||
if (project) E->syntax_tree = project->syntax_tree;
|
||||
Sentences::break(E->syntax_tree, E->body_text, TRUE, E->as_copy, -1);
|
||||
E->body_text_unbroken = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
inform_extension *Extensions::corresponding_to(source_file *sf) {
|
||||
if (sf == NULL) return NULL;
|
||||
inbuild_copy *C = RETRIEVE_POINTER_inbuild_copy(sf->your_ref);
|
||||
if (C == NULL) return NULL;
|
||||
if (C->edition->work->genre != extension_genre) return NULL;
|
||||
return ExtensionManager::from_copy(C);
|
||||
}
|
||||
|
||||
@ We concoct a textual synopsis in the form
|
||||
|
||||
|"Pantomime Sausages by Mr Punch"|
|
||||
|
||||
to be used by |SourceFiles::read_extension_source_text| for printing to |stdout|. Since
|
||||
we dare not assume |stdout| can manage characters outside the basic ASCII
|
||||
range, we flatten them from general ISO to plain ASCII.
|
||||
|
||||
@<Concoct a synopsis for the extension to be read@> =
|
||||
WRITE_TO(synopsis, "%S by %S", E->as_copy->edition->work->title, E->as_copy->edition->work->author_name);
|
||||
LOOP_THROUGH_TEXT(pos, synopsis)
|
||||
Str::put(pos,
|
||||
Characters::make_filename_safe(Str::get(pos)));
|
||||
|
||||
@ If an extension file contains the special text (outside literal mode) of
|
||||
|
||||
|---- Documentation ----|
|
||||
|
||||
then this is taken as the end of the Inform source, and the beginning of a
|
||||
snippet of documentation about the extension; text from that point on is
|
||||
saved until later, but not broken into sentences for the parse tree, and it
|
||||
is therefore invisible to the rest of Inform. If this division line is not
|
||||
present then the extension contains only body source and no documentation.
|
||||
|
||||
=
|
||||
<extension-body> ::=
|
||||
*** ---- documentation ---- ... | ==> TRUE
|
||||
... ==> FALSE
|
||||
|
||||
@<Break the extension's text into body and documentation@> =
|
||||
<extension-body>(EXW);
|
||||
E->body_text = GET_RW(<extension-body>, 1);
|
||||
if (<<r>>) E->documentation_text = GET_RW(<extension-body>, 2);
|
||||
E->body_text_unbroken = TRUE; /* mark this to be sentence-broken */
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[Kits::] Kits.
|
||||
|
||||
A kit is a combination of Inter code with an Inform 7 extension.
|
||||
Behaviour specific to copies of the kit genre.
|
||||
|
||||
@h Genre definition.
|
||||
|
||||
|
@ -201,7 +201,7 @@ If there are $S$ sections then the graph has $S+5$ vertices and $4(S+1)$ edges.
|
|||
|
||||
=
|
||||
void Kits::construct_graph(inform_kit *K) {
|
||||
RUN_ONLY_IN_PHASE(GOING_OPERATIONAL_INBUILD_PHASE)
|
||||
RUN_ONLY_IN_PHASE(GRAPH_CONSTRUCTION_INBUILD_PHASE)
|
||||
if (K == NULL) return;
|
||||
inbuild_copy *C = K->as_copy;
|
||||
pathname *P = C->location_if_path;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[Languages::] Language Services.
|
||||
|
||||
An Inform 7 language definition bundle.
|
||||
Behaviour specific to copies of the language genre.
|
||||
|
||||
@ Inform can read and write text in multiple natural languages, though it
|
||||
needs help to do so. Each natural language known to Inform comes from a
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
[Pipelines::] Pipeline Services.
|
||||
|
||||
A pipeline is a list of steps to be followed by the Inter processor forming
|
||||
the back end of the Inform compiler.
|
||||
Behaviour specific to copies of the pipeline genre.
|
||||
|
||||
@ =
|
||||
typedef struct inform_pipeline {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[Projects::] Project Services.
|
||||
|
||||
An Inform 7 project.
|
||||
Behaviour specific to copies of either the projectbundle or projectfile genres.
|
||||
|
||||
@ =
|
||||
typedef struct kit_dependency {
|
||||
|
@ -319,7 +319,7 @@ void Projects::graph_dependent_language(inform_project *project, build_vertex *V
|
|||
}
|
||||
|
||||
void Projects::construct_graph(inform_project *project) {
|
||||
RUN_ONLY_IN_PHASE(GOING_OPERATIONAL_INBUILD_PHASE)
|
||||
RUN_ONLY_IN_PHASE(GRAPH_CONSTRUCTION_INBUILD_PHASE)
|
||||
if (project == NULL) return;
|
||||
build_vertex *V = project->as_copy->vertex;
|
||||
build_vertex *S;
|
||||
|
@ -355,7 +355,7 @@ void Projects::read_source_text_for(inform_project *project) {
|
|||
ParseTree::annotate_int(inclusions_heading, implied_heading_ANNOT, TRUE);
|
||||
Headings::declare(project->syntax_tree, inclusions_heading);
|
||||
|
||||
int wc = lexer_wordcount, bwc = -1;
|
||||
int wc = lexer_wordcount;
|
||||
TEMPORARY_TEXT(early);
|
||||
Projects::early_source_text(early, project);
|
||||
if (Str::len(early) > 0) Feeds::feed_stream(early);
|
||||
|
@ -366,22 +366,26 @@ void Projects::read_source_text_for(inform_project *project) {
|
|||
wording early_W = Wordings::new(wc, lexer_wordcount-1);
|
||||
|
||||
int l = ParseTree::push_attachment_point(project->syntax_tree, inclusions_heading);
|
||||
Sentences::break(project->syntax_tree, early_W, FALSE, project->as_copy, bwc);
|
||||
Sentences::break_into_project_copy(project->syntax_tree, early_W, project->as_copy);
|
||||
ParseTree::pop_attachment_point(project->syntax_tree, l);
|
||||
|
||||
wc = lexer_wordcount;
|
||||
int start_set = FALSE;
|
||||
linked_list *L = Projects::source(project);
|
||||
if (L) {
|
||||
build_vertex *N;
|
||||
LOOP_OVER_LINKED_LIST(N, build_vertex, L) {
|
||||
filename *F = N->as_file;
|
||||
if (bwc == -1) bwc = lexer_wordcount;
|
||||
if (start_set == FALSE) {
|
||||
start_set = TRUE;
|
||||
Sentences::set_start_of_source(lexer_wordcount);
|
||||
}
|
||||
N->as_source_file = SourceText::read_file(project->as_copy, F, N->source_source,
|
||||
FALSE, TRUE);
|
||||
}
|
||||
}
|
||||
l = ParseTree::push_attachment_point(project->syntax_tree, project->syntax_tree->root_node);
|
||||
Sentences::break(project->syntax_tree, Wordings::new(wc, lexer_wordcount-1), FALSE, project->as_copy, bwc);
|
||||
Sentences::break_into_project_copy(project->syntax_tree, Wordings::new(wc, lexer_wordcount-1), project->as_copy);
|
||||
ParseTree::pop_attachment_point(project->syntax_tree, l);
|
||||
|
||||
l = ParseTree::push_attachment_point(project->syntax_tree, project->syntax_tree->root_node);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[Templates::] Template Services.
|
||||
|
||||
An Inform 7 website template.
|
||||
Behaviour specific to copies of the template genre.
|
||||
|
||||
@ =
|
||||
typedef struct inform_template {
|
||||
|
|
|
@ -28,29 +28,31 @@ Chapter 3: Incremental Builds
|
|||
Inform6 Skill
|
||||
Inblorb Skill
|
||||
|
||||
Chapter 4: Managing Genres of Work
|
||||
Kit Manager
|
||||
Chapter 4: Genre Management
|
||||
Extension Manager
|
||||
Kit Manager
|
||||
Language Manager
|
||||
Pipeline Manager
|
||||
Project Bundle Manager
|
||||
Project File Manager
|
||||
Template Manager
|
||||
Pipeline Manager
|
||||
|
||||
Chapter 5: Services for the Inform Compiler
|
||||
Kit Services
|
||||
Chapter 5: Genre Services
|
||||
Extension Services
|
||||
Extension Dictionary
|
||||
Extension Documentation
|
||||
Extension Census
|
||||
Template Services
|
||||
Project Services
|
||||
Kit Services
|
||||
Language Services
|
||||
Pipeline Services
|
||||
Project Services
|
||||
Template Services
|
||||
|
||||
Chapter 6: Handling Inform Source Text
|
||||
Chapter 6: Inform Source Text
|
||||
Source Text
|
||||
Headings
|
||||
Inclusions
|
||||
Control Structures
|
||||
Virtual Machine Grammar
|
||||
|
||||
Chapter 7: Extension Indexing
|
||||
Extension Dictionary
|
||||
Extension Documentation
|
||||
Extension Census
|
||||
|
|
|
@ -58,14 +58,27 @@ int sfsm_in_tabbed_mode = FALSE;
|
|||
int sfsm_main_source_start_wn = -1;
|
||||
COPY_FILE_TYPE *sfsm_copy = NULL;
|
||||
|
||||
void Sentences::set_start_of_source(int wn) {
|
||||
sfsm_main_source_start_wn = wn;
|
||||
}
|
||||
|
||||
@ Now for the routine itself. We break into bite-sized chunks, each of which is
|
||||
despatched to the |Sentences::make_node| routine with a note of the punctuation
|
||||
which was used to end it. Each call to this routine represents one cycle of our
|
||||
finite state machine.
|
||||
|
||||
=
|
||||
void Sentences::break(parse_node_tree *T, wording W, int is_extension,
|
||||
COPY_FILE_TYPE *from_copy, int bwc) {
|
||||
void Sentences::break(parse_node_tree *T, wording W) {
|
||||
Sentences::break_inner(T, W, FALSE, NULL);
|
||||
}
|
||||
void Sentences::break_into_project_copy(parse_node_tree *T, wording W, COPY_FILE_TYPE *C) {
|
||||
Sentences::break_inner(T, W, FALSE, C);
|
||||
}
|
||||
void Sentences::break_into_extension_copy(parse_node_tree *T, wording W, COPY_FILE_TYPE *C) {
|
||||
Sentences::break_inner(T, W, TRUE, C);
|
||||
}
|
||||
|
||||
void Sentences::break_inner(parse_node_tree *T, wording W, int is_extension, COPY_FILE_TYPE *from_copy) {
|
||||
while (((Wordings::nonempty(W))) && (compare_word(Wordings::first_wn(W), PARBREAK_V)))
|
||||
W = Wordings::trim_first_word(W);
|
||||
if (Wordings::empty(W)) return;
|
||||
|
@ -116,7 +129,6 @@ that is why these are global variables rather than locals in |Sentences::break|.
|
|||
sfsm_copy = from_copy;
|
||||
if (is_extension) sfsm_extension_position = 1;
|
||||
else sfsm_extension_position = 0;
|
||||
sfsm_main_source_start_wn = bwc;
|
||||
|
||||
@ A table is any sentence beginning with the word "Table". (Bad news for
|
||||
anyone writing "Table Mountain is a room.", of course, but there are other
|
||||
|
|
|
@ -28,7 +28,7 @@ void Unit::test_tree(text_stream *arg) {
|
|||
if (sf == NULL) { PRINT("File has failed to open\n"); return; }
|
||||
syntax_tree = ParseTree::new_tree();
|
||||
PRINT("Read %d words\n", Wordings::length(W));
|
||||
Sentences::break(syntax_tree, W, FALSE, NULL, -1);
|
||||
Sentences::break(syntax_tree, W);
|
||||
|
||||
text_stream *save_DL = DL;
|
||||
DL = STDOUT;
|
||||
|
|
|
@ -71,7 +71,7 @@ void Unit::test_diagrams(text_stream *arg) {
|
|||
if (sf == NULL) { PRINT("File has failed to open\n"); return; }
|
||||
syntax_tree = ParseTree::new_tree();
|
||||
PRINT("Read %d words\n", Wordings::length(W));
|
||||
Sentences::break(syntax_tree, W, FALSE, NULL, -1);
|
||||
Sentences::break(syntax_tree, W);
|
||||
|
||||
text_stream *save_DL = DL;
|
||||
DL = STDOUT;
|
||||
|
|
|
@ -39,7 +39,7 @@ void Unit::test_problems(text_stream *arg) {
|
|||
if (sf == NULL) { PRINT("File has failed to open\n"); return; }
|
||||
syntax_tree = ParseTree::new_tree();
|
||||
PRINT("Read %d words\n", Wordings::length(W));
|
||||
Sentences::break(syntax_tree, W, FALSE, NULL, -1);
|
||||
Sentences::break(syntax_tree, W);
|
||||
|
||||
ParseTree::traverse(syntax_tree, Unit::scan_tree);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue