mirror of
https://github.com/ganelson/inform.git
synced 2024-06-17 07:40:47 +03:00
Refactoring of language services to use JSON metadata
This commit is contained in:
parent
b7a00c67c0
commit
52755d81f0
|
@ -1,6 +1,6 @@
|
|||
# Inform 7
|
||||
|
||||
v10.1.0-beta+6V26 'Krypton' (21 June 2022)
|
||||
v10.1.0-beta+6V27 'Krypton' (23 June 2022)
|
||||
|
||||
## About Inform 7
|
||||
|
||||
|
|
|
@ -121,14 +121,21 @@ states:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_raw</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SQUOTED_TOKSTATE:</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SQUOTED_TOKSTATE:</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ends_here</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\''</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ends_here</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_raw</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">pos</span><span class="plain-syntax">+1) == </span><span class="character-syntax">'\''</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ends_here</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ends_here</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-tkn.html#SP1_3" class="named-paragraph-link"><span class="named-paragraph">Absorb raw material, for sure</span><span class="named-paragraph-number">1.3</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tokeniser_state</span><span class="plain-syntax"> = </span><span class="constant-syntax">NO_TOKSTATE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_raw</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">COMMENT_TOKSTATE:</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\n'</span><span class="plain-syntax">) </span><span class="identifier-syntax">tokeniser_state</span><span class="plain-syntax"> = </span><span class="constant-syntax">NO_TOKSTATE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -65,11 +65,12 @@ function togglePopup(material_id) {
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CorePreform::load</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CorePreform::load</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"can't load preform from null language"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">Languages::path_to_bundle</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="string-syntax">"Syntax.preform"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">nonterminals_declared</span><span class="plain-syntax"> = </span><span class="identifier-syntax">LoadPreform::load</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%d Preform nonterminals read from %f\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">nonterminals_declared</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">nonterminals_declared</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Converting Preform errors to problems. </b>Errors in Preform syntax are generated in the <a href="../words-module/index.html" class="internal">words</a> module, and are
|
||||
|
|
|
@ -317,10 +317,12 @@ group.
|
|||
<span class="plain-syntax"> </span><span class="string-syntax">"has an 'ends here' with nothing having begun"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">BadTitleSentence_SYNERROR:</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-></span><span class="identifier-syntax">details_node</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_BadTitleSentence</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the initial bibliographic sentence can only be a title in double-quotes"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"possibly followed with 'by' and the name of the author."</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::unlocated_problem</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(),</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_BadTitleSentence</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"The opening bibliographic sentence can only be a title in "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"double-quotes, possibly followed with 'by' and the name of "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the author."</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">UnknownLanguageElement_SYNERROR:</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-></span><span class="identifier-syntax">details_node</span><span class="plain-syntax">;</span>
|
||||
|
@ -461,6 +463,16 @@ group.
|
|||
<span class="plain-syntax"> </span><span class="string-syntax">"was %4.)"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">UnavailableLOS_SYNERROR:</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_stream</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-></span><span class="identifier-syntax">details</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(...));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"The project says that its syntax is written in a language "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"other than English (specifically, %1), but the language bundle "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"for that language does not provide a file of Preform definitions."</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"unknown syntax error"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
|
|
@ -265,10 +265,10 @@ for use.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Main::load_preform</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Main::load_preform</span></span>:<br/><a href="1-mn.html#SP2_2">§2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Main::load_preform</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Main::load_preform</span></span>:<br/><a href="1-mn.html#SP2_2">§2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-pth.html#SP4" class="function-link"><span class="function-syntax">Pathnames::down</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">path_to_inbuild</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Tangled"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-fln.html#SP2" class="function-link"><span class="function-syntax">Filenames::in</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Syntax.preform"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="../words-module/4-lp.html#SP1" class="function-link"><span class="function-syntax">LoadPreform::load</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="../words-module/4-lp.html#SP1" class="function-link"><span class="function-syntax">LoadPreform::load</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2_6" class="paragraph-anchor"></a><b>§2.6. Target list. </b>This where we keep the list of targets, in which no copy occurs more than
|
||||
|
|
|
@ -243,7 +243,7 @@ specify non-standard kits. Since the user isn't using the command line, how can
|
|||
the user specify a <span class="extract"><span class="extract-syntax">-kit</span></span>? However, a feature of Inform new in 2022 gets around
|
||||
this. Additional command-line switches for <span class="extract"><span class="extract-syntax">inbuild</span></span> or for <span class="extract"><span class="extract-syntax">inform7</span></span> can be
|
||||
placed in the Materials directory for an Inform project, in files called
|
||||
<span class="extract"><span class="extract-syntax">inbuild-setting.txt</span></span> and <span class="extract"><span class="extract-syntax">inform7-settings.txt</span></span>.
|
||||
<span class="extract"><span class="extract-syntax">inbuild-settings.txt</span></span> and <span class="extract"><span class="extract-syntax">inform7-settings.txt</span></span>.
|
||||
</p>
|
||||
|
||||
<p class="commentary">For example, suppose we set both<sup id="fnref:3"><a href="#fn:3" rel="footnote">3</a></sup> of these files to be:
|
||||
|
@ -671,7 +671,7 @@ In the mean time, it seems premature to commit to any model.
|
|||
</p>
|
||||
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="M-ui.html">❮</a></li><li class="progresscurrentchapter">M</li><li class="progresssection"><a href="M-ui.html">ui</a></li><li class="progresscurrent">agtk</li><li class="progresssection"><a href="M-rc.html">rc</a></li><li class="progresschapter"><a href="1-mn.html">1</a></li><li class="progressnext"><a href="M-rc.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="M-ui.html">❮</a></li><li class="progresscurrentchapter">M</li><li class="progresssection"><a href="M-ui.html">ui</a></li><li class="progresscurrent">agtk</li><li class="progresssection"><a href="M-agtlb.html">agtlb</a></li><li class="progresssection"><a href="M-rc.html">rc</a></li><li class="progresschapter"><a href="1-mn.html">1</a></li><li class="progressnext"><a href="M-agtlb.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
262
docs/inbuild/M-agtlb.html
Normal file
262
docs/inbuild/M-agtlb.html
Normal file
|
@ -0,0 +1,262 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>A Guide to Language Bundles</title>
|
||||
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
||||
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
|
||||
</head>
|
||||
<body class="commentary-font">
|
||||
<nav role="navigation">
|
||||
<h1><a href="../index.html">
|
||||
<img src="../docs-assets/Inform.png" height=72">
|
||||
</a></h1>
|
||||
<ul><li><a href="../index.html">home</a></li>
|
||||
</ul><h2>Compiler</h2><ul>
|
||||
<li><a href="../structure.html">structure</a></li>
|
||||
<li><a href="../inbuildn.html">inbuild</a></li>
|
||||
<li><a href="../inform7n.html">inform7</a></li>
|
||||
<li><a href="../intern.html">inter</a></li>
|
||||
<li><a href="../services.html">services</a></li>
|
||||
<li><a href="../secrets.html">secrets</a></li>
|
||||
</ul><h2>Other Tools</h2><ul>
|
||||
<li><a href="../inblorbn.html">inblorb</a></li>
|
||||
<li><a href="../indocn.html">indoc</a></li>
|
||||
<li><a href="../inform6.html">inform6</a></li>
|
||||
<li><a href="../inpolicyn.html">inpolicy</a></li>
|
||||
<li><a href="../inrtpsn.html">inrtps</a></li>
|
||||
</ul><h2>Resources</h2><ul>
|
||||
<li><a href="../extensions.html">extensions</a></li>
|
||||
<li><a href="../kits.html">kits</a></li>
|
||||
</ul><h2>Repository</h2><ul>
|
||||
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
|
||||
</ul><h2>Related Projects</h2><ul>
|
||||
<li><a href="../../../inweb/index.html">inweb</a></li>
|
||||
<li><a href="../../../intest/index.html">intest</a></li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
<main role="main">
|
||||
<!--Weave of 'A Guide to Language Bundles' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#M">Manual</a></li><li><b>A Guide to Language Bundles</b></li></ul></div>
|
||||
<p class="purpose">Provisional documentation on language bundles.</p>
|
||||
|
||||
<ul class="toc"><li><a href="M-agtlb.html#SP1">§1. About languages</a></li><li><a href="M-agtlb.html#SP3">§3. Language bundles</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. About languages. </b>Like a "kit" or an "extension", a "language bundle" is a resource which Inbuild
|
||||
can use. Language here means the human kind: English, French, Spanish and so on.
|
||||
</p>
|
||||
|
||||
<p class="commentary">For each Inform project it looks at, Inbuild must determine:
|
||||
</p>
|
||||
|
||||
<ul class="items"><li>● The "language of play" (LOP), which is the language printed by the story and
|
||||
recognised in commands by the player.
|
||||
</li><li>● The "language of syntax" (LOS), which is the language the source text for the
|
||||
story is written in.
|
||||
</li></ul>
|
||||
<p class="commentary">Both are by default English. If the LOS is anything other than English, then the LOP
|
||||
must be the same as the LOS. But English syntax has often been used to write
|
||||
Inform stories with LOP other than English, and indeed this is the usual way to
|
||||
write non-English stories. (It is an arduous process to make Inform work
|
||||
with an LOS other than English, and the tool chain needs improvement in this
|
||||
area. But Inbuild understands the necessary concepts, at least.)
|
||||
</p>
|
||||
|
||||
<p class="commentary">The LOP is recorded on the Library Card index entry for an Inform project,
|
||||
and is also included in the iFiction record of a released story.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Inbuild recognises the language of play by looking at the opening, or
|
||||
"bibliographic", sentence of an Inform project. For many projects this
|
||||
consists of a title and perhaps an author, like so:
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
<p>"Why Didn't They Ask Evans?" by Agatha Christie</p>
|
||||
</blockquote>
|
||||
|
||||
<p class="commentary">But it can optionally add a bracketed note giving the language:
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
<p>"Le Port des brumes" by Georges Simenon (in French)</p>
|
||||
</blockquote>
|
||||
|
||||
<p class="commentary">This bracketed note can take two forms. If it begins "in", then the rest must
|
||||
be the English form of the name of a language — in this instance, "French".
|
||||
This must be a language for which Inbuild can find a language bundle (see below).
|
||||
The LOP will be French, and the LOS will be English.
|
||||
</p>
|
||||
|
||||
<p class="commentary">If the note does not begin "in", then it must be text recognised by a language
|
||||
bundle visible to Inbuild (see below). For example:
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
<p>"Le Port des brumes" by Georges Simenon (en français)</p>
|
||||
</blockquote>
|
||||
|
||||
<p class="commentary">This time the LOP and LOS are both French. Inbuild was able to determine that
|
||||
because the French language bundle picked up on the phrase "en français", which
|
||||
Inbuild itself does not recognise.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Language bundles. </b>Inform can only compile a project whose LOP is other than English if it is
|
||||
given extra resources to do so: the default installation covers only English.
|
||||
In a typical situation, three resources are needed:
|
||||
</p>
|
||||
|
||||
<ul class="items"><li>● A language bundle, such as "French".
|
||||
</li><li>● A kit of Inter code, such as "FrenchLanguageKit".
|
||||
</li><li>● An extension of Inform 7 source text, such as "French Language by Paul Mensonge".
|
||||
</li></ul>
|
||||
<p class="commentary">Note: In fact at present the Inform installation does ship with language bundles
|
||||
for English, French, German, Italian, Spanish and Swedish, but those other than
|
||||
English are likely to be dropped from the core installation in a future release,
|
||||
and we recommend that groups of translators begin to keep their own copies,
|
||||
distributing those alongside the necessary kit and extension.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b>Language bundles should be stored in a subdirectory called "Languages",
|
||||
either of an individual project's Materials directory (in which case they will
|
||||
be visible just to that project) or in a so-called "nest" of resources. Language
|
||||
bundles shipped in the core Inform distribution are at <span class="extract"><span class="extract-syntax">inform7/Internal/Languages</span></span>.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Each language bundle is itself a directory, whose name must be the English name
|
||||
of the language (for example, <span class="extract"><span class="extract-syntax">French</span></span>). In v9 (and early betas of v10) of Inform,
|
||||
this directory then contained a file of metadata called <span class="extract"><span class="extract-syntax">about.txt</span></span>. This file
|
||||
is now forbidden to exist, and instead there must be a file called <span class="extract"><span class="extract-syntax">language_metadata.json</span></span>.
|
||||
This is a JSON file very similar to the ones used for kit metadata: see <a href="M-agtk.html" class="internal">A Guide to Kits</a>,
|
||||
which it is probably helpful to read before going much further with this.
|
||||
</p>
|
||||
|
||||
<p class="commentary">For example:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">{</span>
|
||||
<span class="plain-syntax"> "is": {</span>
|
||||
<span class="plain-syntax"> "type": "language",</span>
|
||||
<span class="plain-syntax"> "title": "French"</span>
|
||||
<span class="plain-syntax"> },</span>
|
||||
<span class="plain-syntax"> "needs": [ {</span>
|
||||
<span class="plain-syntax"> "need": {</span>
|
||||
<span class="plain-syntax"> "type": "kit",</span>
|
||||
<span class="plain-syntax"> "title": "FrenchLanguageKit"</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> } ],</span>
|
||||
<span class="plain-syntax"> "language-details": {</span>
|
||||
<span class="plain-syntax"> "translated-name": "Français",</span>
|
||||
<span class="plain-syntax"> "iso-639-1-code": "fr",</span>
|
||||
<span class="plain-syntax"> "translated-syntax-cue": "en français"</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary">Note that at present language bundles have no authorship, so that the <span class="extract"><span class="extract-syntax">"is"</span></span>
|
||||
object does not give an <span class="extract"><span class="extract-syntax">"author"</span></span> field. (This may change in later builds.)
|
||||
Language bundles can have version numbers, like so:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> "is": {</span>
|
||||
<span class="plain-syntax"> "type": "language",</span>
|
||||
<span class="plain-syntax"> "title": "French",</span>
|
||||
<span class="plain-syntax"> "version": "2.3.17"</span>
|
||||
<span class="plain-syntax"> },</span>
|
||||
</pre>
|
||||
<p class="commentary">But the English language kit shipped with Inform is not version-numbered.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b>A language bundle can only have unconditional "needs", each of which must
|
||||
be a kit, and there always has to be at least one kit. If at all possible,
|
||||
use exactly one kit, and give it a name in the form <span class="extract"><span class="extract-syntax">WhateverLanguageKit</span></span>,
|
||||
where <span class="extract"><span class="extract-syntax">Whatever</span></span> is the English form of the language's name. Thus
|
||||
<span class="extract"><span class="extract-syntax">SpanishLanguageKit</span></span>, not <span class="extract"><span class="extract-syntax">EspanolLanguageKit</span></span>.
|
||||
</p>
|
||||
|
||||
<p class="commentary">The kits listed by a language bundle are automatically included by Inbuild
|
||||
when compiling a project whose LOP is that language.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Note that a language bundle does not have an extension among its "needs". It
|
||||
would be incorrect to write:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> "needs": [ {</span>
|
||||
<span class="plain-syntax"> "need": {</span>
|
||||
<span class="plain-syntax"> "type": "kit",</span>
|
||||
<span class="plain-syntax"> "title": "FrenchLanguageKit"</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }, {</span>
|
||||
<span class="plain-syntax"> "need": {</span>
|
||||
<span class="plain-syntax"> "type": "extension",</span>
|
||||
<span class="plain-syntax"> "title": "French Language",</span>
|
||||
<span class="plain-syntax"> "author": "Paul Mensonge"</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> } ],</span>
|
||||
</pre>
|
||||
<p class="commentary">Although the extension is indeed necessary, it should be given in the "needs"
|
||||
of the kit <span class="extract"><span class="extract-syntax">FrenchLanguageKit</span></span>, not of the language bundle "French". Thus
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">French --- needs --> FrenchLanguageKit --- needs --> French Language by Paul Mensonge</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b>The <span class="extract"><span class="extract-syntax">language-details.translated-name</span></span> field is required, and should the the
|
||||
language as it is normally written in the language itself: thus, <span class="extract"><span class="extract-syntax">Deutsch</span></span> not
|
||||
<span class="extract"><span class="extract-syntax">German</span></span>.
|
||||
</p>
|
||||
|
||||
<p class="commentary">As its name suggests, the <span class="extract"><span class="extract-syntax">language-details.iso-639-1-code</span></span> field should be
|
||||
a valid ISO 639-1 code for the language in question — a two-letter code such
|
||||
as "de" (German) or "hr" (Croatian). See for example
|
||||
<a href="https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes" class="external">Wikipedia</a> for a complete list.
|
||||
</p>
|
||||
|
||||
<p class="commentary">The field <span class="extract"><span class="extract-syntax">language-details.translated-syntax-cue</span></span> is optional. If given, it's
|
||||
a "cue" to say that the LOS is this language: see above. For example, it might
|
||||
be <span class="extract"><span class="extract-syntax">en français</span></span>. Note however than this cue text must not start with the word
|
||||
<span class="extract"><span class="extract-syntax">in</span></span>, as that would lead to ambiguity about whether the LOP or the LOS is being
|
||||
set. So, for example, <span class="extract"><span class="extract-syntax">scritto in italiano</span></span> not <span class="extract"><span class="extract-syntax">in italiano</span></span>.
|
||||
</p>
|
||||
|
||||
<p class="commentary">If the user tries to build a project "scritto in italiano", then Inbuild will
|
||||
read a file of Preform declarations called <span class="extract"><span class="extract-syntax">Syntax.preform</span></span> inside the bundle:
|
||||
in this example, at <span class="extract"><span class="extract-syntax">Italian/Syntax.preform</span></span>. Should such a file not exist (or
|
||||
not declare any nonterminals) then Inform will produce a problem like so:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">Problem. The project says that its syntax is written in a language other than</span>
|
||||
<span class="plain-syntax">English (specifically, Italian), but the language bundle for that language does</span>
|
||||
<span class="plain-syntax">not provide a file of Preform definitions.</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. </b>Finally, there is a very sketchy ability for a language bundle to localise
|
||||
the Index for a project: see e.g. <span class="extract"><span class="extract-syntax">inform7/Internal/Languages/French/Index.txt</span></span>.
|
||||
Note that this takes effect only if the user asks it to with a use option:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">Use</span><span class="plain-syntax"> </span><span class="identifier-syntax">French</span><span class="plain-syntax"> </span><span class="identifier-syntax">language</span><span class="plain-syntax"> </span><span class="identifier-syntax">index</span><span class="plain-syntax">.</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="M-agtk.html">❮</a></li><li class="progresscurrentchapter">M</li><li class="progresssection"><a href="M-ui.html">ui</a></li><li class="progresssection"><a href="M-agtk.html">agtk</a></li><li class="progresscurrent">agtlb</li><li class="progresssection"><a href="M-rc.html">rc</a></li><li class="progresschapter"><a href="1-mn.html">1</a></li><li class="progressnext"><a href="M-rc.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -115,7 +115,7 @@ and those not documented in this manual are covered in that one.
|
|||
<span class="plain-syntax">-version print out version number</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="M-agtk.html">❮</a></li><li class="progresscurrentchapter">M</li><li class="progresssection"><a href="M-ui.html">ui</a></li><li class="progresssection"><a href="M-agtk.html">agtk</a></li><li class="progresscurrent">rc</li><li class="progresschapter"><a href="1-mn.html">1</a></li><li class="progressnext"><a href="1-mn.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="M-agtlb.html">❮</a></li><li class="progresscurrentchapter">M</li><li class="progresssection"><a href="M-ui.html">ui</a></li><li class="progresssection"><a href="M-agtk.html">agtk</a></li><li class="progresssection"><a href="M-agtlb.html">agtlb</a></li><li class="progresscurrent">rc</li><li class="progresschapter"><a href="1-mn.html">1</a></li><li class="progressnext"><a href="1-mn.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -627,7 +627,7 @@ the project will still work exactly as it originally did.
|
|||
</p>
|
||||
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprevoff">❮</li><li class="progresscurrentchapter">M</li><li class="progresscurrent">ui</li><li class="progresssection"><a href="M-agtk.html">agtk</a></li><li class="progresssection"><a href="M-rc.html">rc</a></li><li class="progresschapter"><a href="1-mn.html">1</a></li><li class="progressnext"><a href="M-agtk.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprevoff">❮</li><li class="progresscurrentchapter">M</li><li class="progresscurrent">ui</li><li class="progresssection"><a href="M-agtk.html">agtk</a></li><li class="progresssection"><a href="M-agtlb.html">agtlb</a></li><li class="progresssection"><a href="M-rc.html">rc</a></li><li class="progresschapter"><a href="1-mn.html">1</a></li><li class="progressnext"><a href="M-agtk.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -63,6 +63,11 @@
|
|||
<spon class="sectiontitle">A Guide to Kits</span></a> -
|
||||
<span class="sectionpurpose">Provisional documentation on how to make and build new kits.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="M-agtlb.html">
|
||||
<spon class="sectiontitle">A Guide to Language Bundles</span></a> -
|
||||
<span class="sectionpurpose">Provisional documentation on language bundles.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="M-rc.html">
|
||||
<spon class="sectiontitle">Reference Card</span></a> -
|
||||
|
|
|
@ -182,7 +182,7 @@ number of successes.
|
|||
</li></ul>
|
||||
<pre class="undisplayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">Size of lexicon: 3102 excerpt meanings</span>
|
||||
<span class="plain-syntax"> Stored among 840 words out of total vocabulary of 10569</span>
|
||||
<span class="plain-syntax"> Stored among 840 words out of total vocabulary of 10547</span>
|
||||
<span class="plain-syntax"> 710 words have a start list: longest belongs to report (with 293 meanings)</span>
|
||||
<span class="plain-syntax"> 15 words have an end list: longest belongs to case (with 6 meanings)</span>
|
||||
<span class="plain-syntax"> 29 words have a middle list: longest belongs to to (with 4 meanings)</span>
|
||||
|
|
|
@ -72,7 +72,7 @@ really only meaningful for turn-based simulations, as in: "for three turns".
|
|||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">TIMES_UNIT</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> </span><span class="comment-syntax"> used for "for the third time"</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">TURNS_UNIT</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax"> </span><span class="comment-syntax"> used for "for three turns"</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>And the following the constants are used to record how to measure the
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>And the following constants are used to record how to measure the
|
||||
threshold value — "for more than three turns" would be <span class="extract"><span class="extract-syntax">GT_REPM</span></span>, and so
|
||||
on. The default, <span class="extract"><span class="extract-syntax">NO_REPM</span></span>, means that nothing is specified by way of
|
||||
comparison — "four times" — and the meaning of that may depend on
|
||||
|
|
|
@ -103,7 +103,7 @@ comprehensive list of what is there.)
|
|||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tsk.html#SP1_1_6" class="named-paragraph-link"><span class="named-paragraph">Establish resources offered by WorldModelKit</span><span class="named-paragraph-number">1.1.6</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tsk.html#SP1_1_4" class="named-paragraph-link"><span class="named-paragraph">Establish resources offered by CommandParserKit</span><span class="named-paragraph-number">1.1.4</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tsk.html#SP1_1_8" class="named-paragraph-link"><span class="named-paragraph">Establish resources offered by either WorldModelKit or BasicInformExtrasKit</span><span class="named-paragraph-number">1.1.8</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tsk.html#SP1_1_10" class="named-paragraph-link"><span class="named-paragraph">Establish resources offered by either EnglishLanguageKit</span><span class="named-paragraph-number">1.1.10</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tsk.html#SP1_1_10" class="named-paragraph-link"><span class="named-paragraph">Establish resources offered by EnglishLanguageKit</span><span class="named-paragraph-number">1.1.10</span></a></span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-tsk.html#SP1">§1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP1_1_1" class="paragraph-anchor"></a><b>§1.1.1. Offered by BasicInformKit. </b></p>
|
||||
|
@ -622,7 +622,7 @@ comprehensive list of what is there.)
|
|||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">THEN1__WD_HL</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP1_1_10" class="paragraph-anchor"></a><b>§1.1.10. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Establish resources offered by either EnglishLanguageKit</span><span class="named-paragraph-number">1.1.10</span></span><span class="comment-syntax"> =</span>
|
||||
<p class="commentary firstcommentary"><a id="SP1_1_10" class="paragraph-anchor"></a><b>§1.1.10. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Establish resources offered by EnglishLanguageKit</span><span class="named-paragraph-number">1.1.10</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
|
|
@ -381,10 +381,10 @@ which continues until the parent calls <span class="extract"><span class="extrac
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">shared_preform_callback</span><span class="plain-syntax">)(</span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *);</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">shared_preform_callback</span><span class="plain-syntax">)(</span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *);</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Supervisor::optioneering_complete</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">compile_only</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">preform_callback</span><span class="plain-syntax">)(</span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">preform_callback</span><span class="plain-syntax">)(</span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RUN_ONLY_IN_PHASE</span><span class="plain-syntax">(</span><span class="constant-syntax">CONFIGURATION_INBUILD_PHASE</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inbuild_phase</span><span class="plain-syntax"> = </span><span class="constant-syntax">PRETINKERING_INBUILD_PHASE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">shared_preform_callback</span><span class="plain-syntax"> = </span><span class="identifier-syntax">preform_callback</span><span class="plain-syntax">;</span>
|
||||
|
@ -707,7 +707,7 @@ add them as dependencies only when a project exists.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">kits_requested_at_command_line</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kit_name</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">kit_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax">, </span><span class="identifier-syntax">kits_requested_at_command_line</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ps2.html#SP16" class="function-link"><span class="function-syntax">Projects::add_kit_dependency</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="identifier-syntax">kit_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ps2.html#SP16" class="function-link"><span class="function-syntax">Projects::add_kit_dependency</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="identifier-syntax">kit_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
|
|
@ -144,7 +144,7 @@ which use this module:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">Memory::reason_name</span><span class="plain-syntax">(</span><span class="constant-syntax">EXTENSION_DICTIONARY_MREASON</span><span class="plain-syntax">, </span><span class="string-syntax">"extension dictionary"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'d'</span><span class="plain-syntax">, </span><a href="7-dct.html#SP7" class="function-link"><span class="function-syntax">ExtensionDictionary::log_entry</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_writer</span><span class="plain-syntax">(</span><span class="character-syntax">'X'</span><span class="plain-syntax">, &</span><a href="2-wrk.html#SP8" class="function-link"><span class="function-syntax">Works::writer</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_writer</span><span class="plain-syntax">(</span><span class="character-syntax">'J'</span><span class="plain-syntax">, &</span><a href="5-ls.html#SP5" class="function-link"><span class="function-syntax">Languages::log</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_writer</span><span class="plain-syntax">(</span><span class="character-syntax">'J'</span><span class="plain-syntax">, &</span><a href="5-ls.html#SP4" class="function-link"><span class="function-syntax">Languages::log</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Log::declare_aspect</span><span class="plain-syntax">(</span><span class="constant-syntax">EXTENSIONS_CENSUS_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"extensions census"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Log::declare_aspect</span><span class="plain-syntax">(</span><span class="constant-syntax">HEADINGS_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"headings"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="1-ic.html#SP3" class="function-link"><span class="function-syntax">Supervisor::start</span></a><span class="plain-syntax">();</span>
|
||||
|
|
|
@ -104,7 +104,7 @@ fields are blank.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="function-syntax">CopyErrors::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">CopyErrors::new</span></span>:<br/>Source Text - <a href="6-st.html#SP14">§14</a><br/>Headings - <a href="6-hdn.html#SP12_1">§12.1</a>, <a href="6-hdn.html#SP12_2">§12.2</a>, <a href="6-hdn.html#SP22_1">§22.1</a>, <a href="6-hdn.html#SP23_2">§23.2</a>, <a href="6-hdn.html#SP22_3">§22.3</a><br/>The Bibliographic Sentence - <a href="6-tbs.html#SP1">§1</a><br/>Inclusions - <a href="6-inc.html#SP2_1">§2.1</a>, <a href="6-inc.html#SP5_1_2">§5.1.2</a>, <a href="6-inc.html#SP6_1">§6.1</a>, <a href="6-inc.html#SP8_1">§8.1</a>, <a href="6-inc.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cat</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">subcat</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="function-syntax">CopyErrors::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">CopyErrors::new</span></span>:<br/>Project Services - <a href="5-ps2.html#SP30_1_2_3">§30.1.2.3</a><br/>Source Text - <a href="6-st.html#SP14">§14</a><br/>Headings - <a href="6-hdn.html#SP12_1">§12.1</a>, <a href="6-hdn.html#SP12_2">§12.2</a>, <a href="6-hdn.html#SP22_1">§22.1</a>, <a href="6-hdn.html#SP23_2">§23.2</a>, <a href="6-hdn.html#SP22_3">§22.3</a><br/>Inclusions - <a href="6-inc.html#SP2_1">§2.1</a>, <a href="6-inc.html#SP5_1_2">§5.1.2</a>, <a href="6-inc.html#SP6_1">§6.1</a>, <a href="6-inc.html#SP8_1">§8.1</a>, <a href="6-inc.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cat</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">subcat</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">copy_error</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-></span><span class="element-syntax">copy</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-></span><span class="element-syntax">error_category</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cat</span><span class="plain-syntax">;</span>
|
||||
|
@ -121,7 +121,7 @@ fields are blank.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">CE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="function-syntax">CopyErrors::new_T</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">CopyErrors::new_T</span></span>:<br/>JSON Metadata - <a href="2-jm.html#SP1_1">§1.1</a>, <a href="2-jm.html#SP1_2">§1.2</a>, <a href="2-jm.html#SP1_3_1">§1.3.1</a>, <a href="2-jm.html#SP1_3_2">§1.3.2</a>, <a href="2-jm.html#SP1_3_3">§1.3.3</a>, <a href="2-jm.html#SP1_3_4">§1.3.4</a>, <a href="2-jm.html#SP1_3_5">§1.3.5</a>, <a href="2-jm.html#SP1_4">§1.4</a>, <a href="2-jm.html#SP2">§2</a><br/>Extension Services - <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><br/>Kit Services - <a href="5-ks.html#SP4_1">§4.1</a>, <a href="5-ks.html#SP4_4">§4.4</a>, <a href="5-ks.html#SP4_4_1">§4.4.1</a>, <a href="5-ks.html#SP4_4_1_1">§4.4.1.1</a>, <a href="5-ks.html#SP4_4_2">§4.4.2</a><br/>Project Services - <a href="5-ps2.html#SP28">§28</a><br/>Headings - <a href="6-hdn.html#SP22_2">§22.2</a><br/>Inclusions - <a href="6-inc.html#SP5_1_1">§5.1.1</a>, <a href="6-inc.html#SP5_1_2">§5.1.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cat</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">subcat</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">NB</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="function-syntax">CopyErrors::new_T</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">CopyErrors::new_T</span></span>:<br/>JSON Metadata - <a href="2-jm.html#SP1_1">§1.1</a>, <a href="2-jm.html#SP1_2">§1.2</a>, <a href="2-jm.html#SP1_3_1">§1.3.1</a>, <a href="2-jm.html#SP1_3_2">§1.3.2</a>, <a href="2-jm.html#SP1_3_3">§1.3.3</a>, <a href="2-jm.html#SP1_3_4">§1.3.4</a>, <a href="2-jm.html#SP1_3_5">§1.3.5</a>, <a href="2-jm.html#SP1_4">§1.4</a>, <a href="2-jm.html#SP1_5">§1.5</a>, <a href="2-jm.html#SP1_6">§1.6</a><br/>Extension Services - <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><br/>Kit Services - <a href="5-ks.html#SP4_3">§4.3</a>, <a href="5-ks.html#SP4_3_1">§4.3.1</a>, <a href="5-ks.html#SP4_3_1_1">§4.3.1.1</a>, <a href="5-ks.html#SP4_3_2">§4.3.2</a><br/>Language Services - <a href="5-ls.html#SP2">§2</a>, <a href="5-ls.html#SP2_2">§2.2</a><br/>Project Services - <a href="5-ps2.html#SP28">§28</a>, <a href="5-ps2.html#SP29">§29</a><br/>Headings - <a href="6-hdn.html#SP22_2">§22.2</a><br/>Inclusions - <a href="6-inc.html#SP5_1_1">§5.1.1</a>, <a href="6-inc.html#SP5_1_2">§5.1.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cat</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">subcat</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">NB</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax"> = </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cat</span><span class="plain-syntax">, </span><span class="identifier-syntax">subcat</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-></span><span class="element-syntax">details</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">NB</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">CE</span><span class="plain-syntax">;</span>
|
||||
|
@ -164,7 +164,7 @@ we also offer these functions to tack extra details on:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-></span><span class="element-syntax">details_work2</span><span class="plain-syntax"> = </span><span class="identifier-syntax">w2</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CopyErrors::supply_node</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">CopyErrors::supply_node</span></span>:<br/>Project Services - <a href="5-ps2.html#SP28">§28</a><br/>Source Text - <a href="6-st.html#SP14">§14</a><br/>Headings - <a href="6-hdn.html#SP12_1">§12.1</a>, <a href="6-hdn.html#SP12_2">§12.2</a>, <a href="6-hdn.html#SP22_1">§22.1</a>, <a href="6-hdn.html#SP22_2">§22.2</a>, <a href="6-hdn.html#SP22_3">§22.3</a><br/>The Bibliographic Sentence - <a href="6-tbs.html#SP1">§1</a><br/>Inclusions - <a href="6-inc.html#SP2_1">§2.1</a>, <a href="6-inc.html#SP5_1_1">§5.1.1</a>, <a href="6-inc.html#SP5_1_2">§5.1.2</a>, <a href="6-inc.html#SP6_1">§6.1</a>, <a href="6-inc.html#SP8_1">§8.1</a>, <a href="6-inc.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">n</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CopyErrors::supply_node</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">CopyErrors::supply_node</span></span>:<br/>Project Services - <a href="5-ps2.html#SP28">§28</a><br/>Source Text - <a href="6-st.html#SP14">§14</a><br/>Headings - <a href="6-hdn.html#SP12_1">§12.1</a>, <a href="6-hdn.html#SP12_2">§12.2</a>, <a href="6-hdn.html#SP22_1">§22.1</a>, <a href="6-hdn.html#SP22_2">§22.2</a>, <a href="6-hdn.html#SP22_3">§22.3</a><br/>Inclusions - <a href="6-inc.html#SP2_1">§2.1</a>, <a href="6-inc.html#SP5_1_1">§5.1.1</a>, <a href="6-inc.html#SP5_1_2">§5.1.2</a>, <a href="6-inc.html#SP6_1">§6.1</a>, <a href="6-inc.html#SP8_1">§8.1</a>, <a href="6-inc.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">n</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-></span><span class="element-syntax">details_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">n</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
|
@ -287,7 +287,9 @@ output.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">HeadingInPlaceOfSubordinate_SYNERROR:</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"heading is in place of another heading subordinate to itself"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">HeadingInPlaceOfUnknown_SYNERROR:</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"heading is in place of another heading which doesn't exist'"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"heading is in place of another heading which doesn't exist"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">UnavailableLOS_SYNERROR:</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"this language bundle does not provide Preform syntax"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"syntax error"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
|
|
@ -89,7 +89,7 @@ stored here.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure inbuild_copy is accessed in 1/ic, 2/ce, 2/nst, 2/jm, 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/ks, 5/ls, 5/ps2, 6/st, 6/hdn, 6/tbs, 6/inc, 7/dct, 7/cns, 7/ip, 7/ip2 and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure inbuild_copy is accessed in 1/ic, 2/ce, 2/nst, 2/jm, 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/ks, 5/ls, 5/ps2, 6/st, 6/hdn, 6/inc, 7/dct, 7/cns, 7/ip, 7/ip2 and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></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...
|
||||
</p>
|
||||
|
@ -141,7 +141,7 @@ for later reporting. These are stored in a list.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Copies::attach_error</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Copies::attach_error</span></span>:<br/>JSON Metadata - <a href="2-jm.html#SP1_1">§1.1</a>, <a href="2-jm.html#SP1_2">§1.2</a>, <a href="2-jm.html#SP1_3_1">§1.3.1</a>, <a href="2-jm.html#SP1_3_2">§1.3.2</a>, <a href="2-jm.html#SP1_3_3">§1.3.3</a>, <a href="2-jm.html#SP1_3_4">§1.3.4</a>, <a href="2-jm.html#SP1_3_5">§1.3.5</a>, <a href="2-jm.html#SP1_4">§1.4</a>, <a href="2-jm.html#SP2">§2</a><br/>Extension Services - <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><br/>Kit Services - <a href="5-ks.html#SP4_1">§4.1</a>, <a href="5-ks.html#SP4_4">§4.4</a>, <a href="5-ks.html#SP4_4_1">§4.4.1</a>, <a href="5-ks.html#SP4_4_1_1">§4.4.1.1</a>, <a href="5-ks.html#SP4_4_2">§4.4.2</a><br/>Project Services - <a href="5-ps2.html#SP28">§28</a><br/>Source Text - <a href="6-st.html#SP2">§2</a>, <a href="6-st.html#SP3">§3</a>, <a href="6-st.html#SP6">§6</a>, <a href="6-st.html#SP14">§14</a><br/>Headings - <a href="6-hdn.html#SP12_1">§12.1</a>, <a href="6-hdn.html#SP12_2">§12.2</a>, <a href="6-hdn.html#SP22_1">§22.1</a>, <a href="6-hdn.html#SP23_2">§23.2</a>, <a href="6-hdn.html#SP22_2">§22.2</a>, <a href="6-hdn.html#SP22_3">§22.3</a><br/>The Bibliographic Sentence - <a href="6-tbs.html#SP1">§1</a><br/>Inclusions - <a href="6-inc.html#SP2_1">§2.1</a>, <a href="6-inc.html#SP5_1_1">§5.1.1</a>, <a href="6-inc.html#SP5_1_2">§5.1.2</a>, <a href="6-inc.html#SP6_1">§6.1</a>, <a href="6-inc.html#SP8_1">§8.1</a>, <a href="6-inc.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Copies::attach_error</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Copies::attach_error</span></span>:<br/>JSON Metadata - <a href="2-jm.html#SP1_1">§1.1</a>, <a href="2-jm.html#SP1_2">§1.2</a>, <a href="2-jm.html#SP1_3_1">§1.3.1</a>, <a href="2-jm.html#SP1_3_2">§1.3.2</a>, <a href="2-jm.html#SP1_3_3">§1.3.3</a>, <a href="2-jm.html#SP1_3_4">§1.3.4</a>, <a href="2-jm.html#SP1_3_5">§1.3.5</a>, <a href="2-jm.html#SP1_4">§1.4</a>, <a href="2-jm.html#SP1_5">§1.5</a>, <a href="2-jm.html#SP1_6">§1.6</a><br/>Extension Services - <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><br/>Kit Services - <a href="5-ks.html#SP4_3">§4.3</a>, <a href="5-ks.html#SP4_3_1">§4.3.1</a>, <a href="5-ks.html#SP4_3_1_1">§4.3.1.1</a>, <a href="5-ks.html#SP4_3_2">§4.3.2</a><br/>Language Services - <a href="5-ls.html#SP2">§2</a>, <a href="5-ls.html#SP2_2">§2.2</a><br/>Project Services - <a href="5-ps2.html#SP28">§28</a>, <a href="5-ps2.html#SP29">§29</a>, <a href="5-ps2.html#SP30_1_2_3">§30.1.2.3</a><br/>Source Text - <a href="6-st.html#SP2">§2</a>, <a href="6-st.html#SP3">§3</a>, <a href="6-st.html#SP6">§6</a>, <a href="6-st.html#SP14">§14</a><br/>Headings - <a href="6-hdn.html#SP12_1">§12.1</a>, <a href="6-hdn.html#SP12_2">§12.2</a>, <a href="6-hdn.html#SP22_1">§22.1</a>, <a href="6-hdn.html#SP23_2">§23.2</a>, <a href="6-hdn.html#SP22_2">§22.2</a>, <a href="6-hdn.html#SP22_3">§22.3</a><br/>Inclusions - <a href="6-inc.html#SP2_1">§2.1</a>, <a href="6-inc.html#SP5_1_1">§5.1.1</a>, <a href="6-inc.html#SP5_1_2">§5.1.2</a>, <a href="6-inc.html#SP6_1">§6.1</a>, <a href="6-inc.html#SP8_1">§8.1</a>, <a href="6-inc.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no copy to attach to"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ce.html#SP4" class="function-link"><span class="function-syntax">CopyErrors::supply_attached_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">CE</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">CE</span><span class="plain-syntax">, </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-></span><span class="element-syntax">errors_reading_source_text</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -95,7 +95,7 @@ might work with all VMs, while version 8 required a 32-bit architecture.
|
|||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure inbuild_edition is accessed in 1/ic, 2/cps, 2/ce, 2/rqr, 2/nst, 2/jm, 3/bg, 3/ib, 3/is2, 4/em, 4/km, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/ks, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/tbs, 6/inc, 6/vmg, 7/dct, 7/cns, 7/ip, 7/ip2 and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure inbuild_edition is accessed in 1/ic, 2/cps, 2/ce, 2/rqr, 2/nst, 2/jm, 3/bg, 3/ib, 3/is2, 4/em, 4/km, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/ks, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 6/vmg, 7/dct, 7/cns, 7/ip, 7/ip2 and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>When a copy is to be duplicated into a nest <span class="extract"><span class="extract-syntax">N</span></span>, we need to work out where
|
||||
to put it. For example, version 2.1 of the extension Marbles by Steve Hogarth
|
||||
would go into <span class="extract"><span class="extract-syntax">N/Extensions/Steve Hogarth/Marbles-v2_1.i7x</span></span>. The following
|
||||
|
|
|
@ -70,8 +70,8 @@ identifying the copy which it purports to identify.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">JSONMetadata::read_metadata_file</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">JSONMetadata::read_metadata_file</span></span>:<br/>Kit Services - <a href="5-ks.html#SP4">§4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax"> = </span><a href="2-jm.html#SP3" class="function-link"><span class="function-syntax">JSONMetadata::requirements</span></a><span class="plain-syntax">();</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">JSONMetadata::read_metadata_file</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">JSONMetadata::read_metadata_file</span></span>:<br/>Kit Services - <a href="5-ks.html#SP4">§4</a><br/>Language Services - <a href="5-ls.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax"> = </span><a href="2-jm.html#SP2" class="function-link"><span class="function-syntax">JSONMetadata::requirements</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">contents</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TextFiles::read</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"unable to read file of JSON metadata"</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> &</span><a href="2-jm.html#SP1" class="function-link"><span class="function-syntax">JSONMetadata::read_metadata_file_helper</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">contents</span><span class="plain-syntax">);</span>
|
||||
|
@ -87,6 +87,8 @@ identifying the copy which it purports to identify.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">-></span><span class="element-syntax">metadata_record</span><span class="plain-syntax"> = </span><span class="identifier-syntax">obj</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-jm.html#SP1_3" class="named-paragraph-link"><span class="named-paragraph">Examine the "is" member of the metadata object</span><span class="named-paragraph-number">1.3</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-jm.html#SP1_4" class="named-paragraph-link"><span class="named-paragraph">Police the "needs"</span><span class="named-paragraph-number">1.4</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">compatibility</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"compatibility"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">compatibility</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="2-jm.html#SP1_6" class="named-paragraph-link"><span class="named-paragraph">Extract compatibility</span><span class="named-paragraph-number">1.6</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">JSONMetadata::read_metadata_file_helper</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">,</span>
|
||||
|
@ -173,6 +175,13 @@ to say that <span class="extract"><span class="extract-syntax">is.type</span></s
|
|||
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">METADATA_MALFORMED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">err</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">language_details</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"language-details"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">language_details</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">Str::ne</span><span class="plain-syntax">(</span><span class="identifier-syntax">type_text</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"language"</span><span class="plain-syntax">))) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="string-syntax">"the metadata contains language-details but is not for a language"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">METADATA_MALFORMED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">err</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-jm.html#SP1_3">§1.3</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP1_3_2" class="paragraph-anchor"></a><b>§1.3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make sure the title is correct</span><span class="named-paragraph-number">1.3.2</span></span><span class="comment-syntax"> =</span>
|
||||
|
@ -252,14 +261,14 @@ checking here results in more explicit error messages.
|
|||
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">METADATA_MALFORMED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">err</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><a href="2-jm.html#SP2" class="function-link"><span class="function-syntax">JSONMetadata::not_both</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">if_clause</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"'if' clause of a requirement"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-jm.html#SP2" class="function-link"><span class="function-syntax">JSONMetadata::not_both</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">unless_clause</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"'unless' clause of a requirement"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-jm.html#SP2" class="function-link"><span class="function-syntax">JSONMetadata::not_both</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">needs_clause</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"'needs' clause of a requirement"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-jm.html#SP1_5" class="function-link"><span class="function-syntax">JSONMetadata::not_both</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">if_clause</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"'if' clause of a requirement"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-jm.html#SP1_5" class="function-link"><span class="function-syntax">JSONMetadata::not_both</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">unless_clause</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"'unless' clause of a requirement"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-jm.html#SP1_5" class="function-link"><span class="function-syntax">JSONMetadata::not_both</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">needs_clause</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"'needs' clause of a requirement"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-jm.html#SP1">§1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>All very pedantic, but:
|
||||
<p class="commentary firstcommentary"><a id="SP1_5" class="paragraph-anchor"></a><b>§1.5. </b>All very pedantic, but:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -291,7 +300,21 @@ checking here results in more explicit error messages.
|
|||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>The following returns the schema needed for (b); we will load it in from a file
|
||||
<p class="commentary firstcommentary"><a id="SP1_6" class="paragraph-anchor"></a><b>§1.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Extract compatibility</span><span class="named-paragraph-number">1.6</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">compatibility_specification</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CS</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Compatibility::from_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">compatibility</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">CS</span><span class="plain-syntax">) </span><span class="identifier-syntax">C</span><span class="plain-syntax">-></span><span class="element-syntax">edition</span><span class="plain-syntax">-></span><span class="element-syntax">compatibility</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CS</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="string-syntax">"cannot read compatibility '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">compatibility</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">METADATA_MALFORMED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">err</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-jm.html#SP1">§1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>The following returns the schema needed for (b); we will load it in from a file
|
||||
in the Inform/Inbuild installation, but will then cache the result so that it
|
||||
loads only once.
|
||||
</p>
|
||||
|
|
|
@ -171,7 +171,7 @@ genre's manager to look for copies of that genre:
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Nests::search_for</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Nests::search_for</span></span>:<br/><a href="2-nst.html#SP8">§8</a><br/>Inclusions - <a href="6-inc.html#SP5_1_2">§5.1.2</a><br/>Census - <a href="7-cns.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">,</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Nests::search_for</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Nests::search_for</span></span>:<br/><a href="2-nst.html#SP8">§8</a><br/>Language Services - <a href="5-ls.html#SP10">§10</a><br/>Inclusions - <a href="6-inc.html#SP5_1_2">§5.1.2</a><br/>Census - <a href="7-cns.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">search_list</span><span class="plain-syntax">, </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">results</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax">, </span><span class="identifier-syntax">search_list</span><span class="plain-syntax">) {</span>
|
||||
|
@ -186,7 +186,7 @@ others:
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> *</span><span class="function-syntax">Nests::search_for_best</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Nests::search_for_best</span></span>:<br/>Inter Skill - <a href="3-is.html#SP3">§3</a>, <a href="3-is.html#SP4">§4</a><br/>Kit Services - <a href="5-ks.html#SP7">§7</a><br/>Language Services - <a href="5-ls.html#SP10">§10</a><br/>Inclusions - <a href="6-inc.html#SP5_1">§5.1</a><br/>Dictionary - <a href="7-dct.html#SP9">§9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">,</span>
|
||||
<span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> *</span><span class="function-syntax">Nests::search_for_best</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Nests::search_for_best</span></span>:<br/>Inter Skill - <a href="3-is.html#SP3">§3</a>, <a href="3-is.html#SP4">§4</a><br/>Kit Services - <a href="5-ks.html#SP7">§7</a><br/>Language Services - <a href="5-ls.html#SP9">§9</a><br/>Inclusions - <a href="6-inc.html#SP5_1">§5.1</a><br/>Dictionary - <a href="7-dct.html#SP9">§9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">search_list</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-nst.html#SP7" class="function-link"><span class="function-syntax">Nests::search_for</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="identifier-syntax">search_list</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -74,23 +74,23 @@ we can give a semantic version number range:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure inbuild_requirement is accessed in 1/ic, 2/edt, 2/cps, 2/ce, 2/jm, 3/bg, 3/ib, 3/is2, 4/em, 4/km, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/ks, 5/ls, 5/ps2, 6/st, 6/hdn, 6/tbs, 6/inc, 7/dct, 7/cns, 7/ip, 7/ip2 and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure inbuild_requirement is accessed in 1/ic, 2/edt, 2/cps, 2/ce, 2/jm, 3/bg, 3/ib, 3/is2, 4/em, 4/km, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/ks, 5/ls, 5/ps2, 6/st, 6/hdn, 6/inc, 7/dct, 7/cns, 7/ip, 7/ip2 and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Here are some creators:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="function-syntax">Requirements::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Requirements::new</span></span>:<br/>Kit Services - <a href="5-ks.html#SP4_4_1_1">§4.4.1.1</a><br/>Inclusions - <a href="6-inc.html#SP4_1">§4.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax">, </span><span class="identifier-syntax">semver_range</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="function-syntax">Requirements::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Requirements::new</span></span>:<br/>Kit Services - <a href="5-ks.html#SP4_3_1_1">§4.3.1.1</a><br/>Language Services - <a href="5-ls.html#SP6">§6</a><br/>Inclusions - <a href="6-inc.html#SP4_1">§4.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax">, </span><span class="identifier-syntax">semver_range</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">work</span><span class="plain-syntax"> = </span><span class="identifier-syntax">work</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">version_range</span><span class="plain-syntax"> = </span><span class="identifier-syntax">R</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="function-syntax">Requirements::any_version_of</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Requirements::any_version_of</span></span>:<br/>Inter Skill - <a href="3-is.html#SP3">§3</a>, <a href="3-is.html#SP4">§4</a><br/>Kit Services - <a href="5-ks.html#SP4_4_1_2">§4.4.1.2</a>, <a href="5-ks.html#SP7">§7</a><br/>Language Services - <a href="5-ls.html#SP10">§10</a><br/>Inclusions - <a href="6-inc.html#SP5_1_2">§5.1.2</a><br/>Dictionary - <a href="7-dct.html#SP9">§9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="function-syntax">Requirements::any_version_of</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Requirements::any_version_of</span></span>:<br/>Inter Skill - <a href="3-is.html#SP3">§3</a>, <a href="3-is.html#SP4">§4</a><br/>Kit Services - <a href="5-ks.html#SP4_3_1_2">§4.3.1.2</a>, <a href="5-ks.html#SP7">§7</a><br/>Language Services - <a href="5-ls.html#SP6">§6</a>, <a href="5-ls.html#SP9">§9</a><br/>Project Services - <a href="5-ps2.html#SP13">§13</a>, <a href="5-ps2.html#SP16">§16</a><br/>Inclusions - <a href="6-inc.html#SP5_1_2">§5.1.2</a><br/>Dictionary - <a href="7-dct.html#SP9">§9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-rqr.html#SP2" class="function-link"><span class="function-syntax">Requirements::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">work</span><span class="plain-syntax">, </span><span class="identifier-syntax">VersionNumberRanges::any_range</span><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="function-syntax">Requirements::anything_of_genre</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Requirements::anything_of_genre</span></span>:<br/>Census - <a href="7-cns.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_genre</span><span class="plain-syntax"> *</span><span class="identifier-syntax">G</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="function-syntax">Requirements::anything_of_genre</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Requirements::anything_of_genre</span></span>:<br/>Language Services - <a href="5-ls.html#SP10">§10</a><br/>Census - <a href="7-cns.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_genre</span><span class="plain-syntax"> *</span><span class="identifier-syntax">G</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-rqr.html#SP2" class="function-link"><span class="function-syntax">Requirements::any_version_of</span></a><span class="plain-syntax">(</span><a href="2-wrk.html#SP2" class="function-link"><span class="function-syntax">Works::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">G</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">""</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">""</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
|
|
|
@ -86,16 +86,16 @@ combination of the textual names and the hash code:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure inbuild_work is accessed in 1/ic, 2/edt, 2/cps, 2/ce, 2/rqr, 2/jm, 3/bg, 3/ib, 3/is2, 4/em, 4/km, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/ks, 5/ls, 5/ps2, 6/tbs, 6/inc, 7/tm, 7/dct, 7/ip and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure inbuild_work is accessed in 1/ic, 2/edt, 2/cps, 2/ce, 2/rqr, 2/jm, 3/bg, 3/ib, 3/is2, 4/em, 4/km, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/ks, 5/ls, 5/ps2, 6/inc, 7/tm, 7/dct, 7/ip and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Each work structure is written only once, and its title and author name are
|
||||
not subsequently altered.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="function-syntax">Works::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Works::new</span></span>:<br/><a href="2-wrk.html#SP11">§11</a><br/>Requirements - <a href="2-rqr.html#SP2">§2</a><br/>Inter Skill - <a href="3-is.html#SP3">§3</a>, <a href="3-is.html#SP4">§4</a><br/>Extension Manager - <a href="4-em.html#SP4">§4</a><br/>Language Manager - <a href="4-lm.html#SP3">§3</a><br/>Project Bundle Manager - <a href="4-pbm.html#SP2">§2</a><br/>Project File Manager - <a href="4-pfm.html#SP2">§2</a><br/>Template Manager - <a href="4-tm.html#SP3">§3</a><br/>Kit Services - <a href="5-ks.html#SP4_4_1">§4.4.1</a>, <a href="5-ks.html#SP7">§7</a><br/>Language Services - <a href="5-ls.html#SP10">§10</a><br/>Headings - <a href="6-hdn.html#SP12_3">§12.3</a><br/>Inclusions - <a href="6-inc.html#SP4_1">§4.1</a><br/>Dictionary - <a href="7-dct.html#SP9">§9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_genre</span><span class="plain-syntax"> *</span><span class="identifier-syntax">genre</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ti</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="function-syntax">Works::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Works::new</span></span>:<br/><a href="2-wrk.html#SP11">§11</a><br/>Requirements - <a href="2-rqr.html#SP2">§2</a><br/>Inter Skill - <a href="3-is.html#SP3">§3</a>, <a href="3-is.html#SP4">§4</a><br/>Extension Manager - <a href="4-em.html#SP4">§4</a><br/>Language Manager - <a href="4-lm.html#SP3">§3</a><br/>Project Bundle Manager - <a href="4-pbm.html#SP2">§2</a><br/>Project File Manager - <a href="4-pfm.html#SP2">§2</a><br/>Template Manager - <a href="4-tm.html#SP3">§3</a><br/>Kit Services - <a href="5-ks.html#SP4_3_1">§4.3.1</a>, <a href="5-ks.html#SP7">§7</a><br/>Language Services - <a href="5-ls.html#SP9">§9</a><br/>Project Services - <a href="5-ps2.html#SP13">§13</a><br/>Headings - <a href="6-hdn.html#SP12_3">§12.3</a><br/>Inclusions - <a href="6-inc.html#SP4_1">§4.1</a><br/>Dictionary - <a href="7-dct.html#SP9">§9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_genre</span><span class="plain-syntax"> *</span><span class="identifier-syntax">genre</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ti</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-wrk.html#SP3" class="function-link"><span class="function-syntax">Works::new_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">genre</span><span class="plain-syntax">, </span><span class="identifier-syntax">ti</span><span class="plain-syntax">, </span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="function-syntax">Works::new_raw</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Works::new_raw</span></span>:<br/>Kit Manager - <a href="4-km.html#SP3">§3</a><br/>Pipeline Manager - <a href="4-pm.html#SP4">§4</a><br/>Extension Services - <a href="5-es.html#SP2_3">§2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_genre</span><span class="plain-syntax"> *</span><span class="identifier-syntax">genre</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ti</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="function-syntax">Works::new_raw</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Works::new_raw</span></span>:<br/>Kit Manager - <a href="4-km.html#SP3">§3</a><br/>Pipeline Manager - <a href="4-pm.html#SP4">§4</a><br/>Extension Services - <a href="5-es.html#SP2_3">§2.3</a><br/>Language Services - <a href="5-ls.html#SP6">§6</a><br/>Project Services - <a href="5-ps2.html#SP16">§16</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_genre</span><span class="plain-syntax"> *</span><span class="identifier-syntax">genre</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ti</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-wrk.html#SP3" class="function-link"><span class="function-syntax">Works::new_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">genre</span><span class="plain-syntax">, </span><span class="identifier-syntax">ti</span><span class="plain-syntax">, </span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
|
|
@ -110,7 +110,7 @@ compiled, is a file vertex.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure build_vertex is accessed in 1/sm, 3/ib, 3/bs2, 3/is, 3/is2, 3/is3, 3/is4, 4/em, 5/es, 5/ks, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/tbs, 6/inc, 7/dct, 7/ip2 and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure build_vertex is accessed in 1/sm, 3/ib, 3/bs2, 3/is, 3/is2, 3/is3, 3/is4, 4/em, 5/es, 5/ks, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 7/dct, 7/ip2 and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Creation. </b>First, the three colours of vertex.
|
||||
</p>
|
||||
|
||||
|
@ -138,7 +138,7 @@ compiled, is a file vertex.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="function-syntax">Graphs::req_vertex</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Graphs::req_vertex</span></span>:<br/>Kit Services - <a href="5-ks.html#SP14">§14</a><br/>Inclusions - <a href="6-inc.html#SP5_1">§5.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="function-syntax">Graphs::req_vertex</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Graphs::req_vertex</span></span>:<br/>Kit Services - <a href="5-ks.html#SP14">§14</a><br/>Project Services - <a href="5-ps2.html#SP13">§13</a>, <a href="5-ps2.html#SP16">§16</a><br/>Inclusions - <a href="6-inc.html#SP5_1">§5.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">R</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no requirement"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><a href="3-bg.html#SP2" class="function-link"><span class="function-syntax">Graphs::file_vertex</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax">-></span><span class="element-syntax">type</span><span class="plain-syntax"> = </span><span class="constant-syntax">REQUIREMENT_VERTEX</span><span class="plain-syntax">;</span>
|
||||
|
@ -165,7 +165,7 @@ at most one edge of each colour.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Graphs::need_this_to_build</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Graphs::need_this_to_build</span></span>:<br/>Kit Services - <a href="5-ks.html#SP13_1">§13.1</a>, <a href="5-ks.html#SP13_2">§13.2</a>, <a href="5-ks.html#SP13_3">§13.3</a><br/>Project Services - <a href="5-ps2.html#SP26_1">§26.1</a>, <a href="5-ps2.html#SP26_2_1">§26.2.1</a>, <a href="5-ps2.html#SP27">§27</a><br/>Inclusions - <a href="6-inc.html#SP1_1">§1.1</a>, <a href="6-inc.html#SP5_1">§5.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Graphs::need_this_to_build</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Graphs::need_this_to_build</span></span>:<br/>Kit Services - <a href="5-ks.html#SP13_1">§13.1</a>, <a href="5-ks.html#SP13_2">§13.2</a>, <a href="5-ks.html#SP13_3">§13.3</a><br/>Project Services - <a href="5-ps2.html#SP13">§13</a>, <a href="5-ps2.html#SP16">§16</a>, <a href="5-ps2.html#SP26_1">§26.1</a>, <a href="5-ps2.html#SP26_2_1">§26.2.1</a>, <a href="5-ps2.html#SP27">§27</a><br/>Inclusions - <a href="6-inc.html#SP1_1">§1.1</a>, <a href="6-inc.html#SP5_1">§5.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">from</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no from"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">to</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no to"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">from</span><span class="plain-syntax"> == </span><span class="identifier-syntax">to</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"graph node depends on itself"</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -95,7 +95,7 @@ which stores data about extensions used by the Inform compiler.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="function-syntax">LanguageManager::from_copy</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">LanguageManager::from_copy</span></span>:<br/>Language Services - <a href="5-ls.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="function-syntax">LanguageManager::from_copy</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">LanguageManager::from_copy</span></span>:<br/>Language Services - <a href="5-ls.html#SP9">§9</a>, <a href="5-ls.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">C</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">C</span><span class="plain-syntax">-></span><span class="element-syntax">edition</span><span class="plain-syntax">-></span><span class="element-syntax">work</span><span class="plain-syntax">-></span><span class="element-syntax">genre</span><span class="plain-syntax"> == </span><span class="identifier-syntax">language_genre</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">RETRIEVE_POINTER_inform_language</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-></span><span class="element-syntax">metadata</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -155,6 +155,9 @@ a valid metadata file. The name should be in English text, without accents.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">canary</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"about.txt"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TextFiles::exists</span><span class="plain-syntax">(</span><span class="identifier-syntax">canary</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-lm.html#SP3" class="function-link"><span class="function-syntax">LanguageManager::new_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">canary</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"language_metadata.json"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TextFiles::exists</span><span class="plain-syntax">(</span><span class="identifier-syntax">canary</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-lm.html#SP3" class="function-link"><span class="function-syntax">LanguageManager::new_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
|
|
@ -94,7 +94,7 @@ length to one character less than the following constants:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure inform_extension is accessed in 1/sm, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 5/ks, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/tbs, 6/inc, 7/tm, 7/dct, 7/cns, 7/ip2 and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure inform_extension is accessed in 1/sm, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 5/ks, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 7/tm, 7/dct, 7/cns, 7/ip2 and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>This is called as soon as a new copy <span class="extract"><span class="extract-syntax">C</span></span> 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").
|
||||
|
@ -474,8 +474,8 @@ This is that time.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Extensions::read_source_text_for</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Extensions::read_source_text_for</span></span>:<br/>Extension Manager - <a href="4-em.html#SP9">§9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><a href="5-ls.html#SP10" class="function-link"><span class="function-syntax">Languages::find_for</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"English"</span><span class="plain-syntax">, </span><a href="5-es.html#SP5" class="function-link"><span class="function-syntax">Extensions::nest_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ls.html#SP8" class="function-link"><span class="function-syntax">Languages::read_Preform_definition</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><a href="5-es.html#SP5" class="function-link"><span class="function-syntax">Extensions::nest_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><a href="5-ls.html#SP9" class="function-link"><span class="function-syntax">Languages::find_for</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"English"</span><span class="plain-syntax">, </span><a href="5-es.html#SP5" class="function-link"><span class="function-syntax">Extensions::nest_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ls.html#SP7" class="function-link"><span class="function-syntax">Languages::read_Preform_definition</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><a href="5-es.html#SP5" class="function-link"><span class="function-syntax">Extensions::nest_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">E</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">-></span><span class="element-syntax">location_if_file</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">doc_only</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">census_mode</span><span class="plain-syntax">) </span><span class="identifier-syntax">doc_only</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -99,7 +99,7 @@ module of <span class="extract"><span class="extract-syntax">inform7</span></spa
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">inform_kit</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure inform_kit is accessed in 1/sm, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 5/es, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/tbs, 6/inc, 7/dct, 7/ip2 and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure inform_kit is accessed in 1/sm, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 5/es, 5/ls, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 7/dct, 7/ip2 and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Kits come with an "if this then that" service for including other kits,
|
||||
and we represent rules with the following:
|
||||
</p>
|
||||
|
@ -153,37 +153,20 @@ interactive fiction features of the compiler, but BasicInformKit does not.
|
|||
<span class="plain-syntax"> </span><a href="2-jm.html#SP1" class="function-link"><span class="function-syntax">JSONMetadata::read_metadata_file</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax">-></span><span class="identifier-syntax">metadata_record</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">compatibility</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-></span><span class="element-syntax">metadata_record</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"compatibility"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">compatibility</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="5-ks.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Extract compatibility</span><span class="named-paragraph-number">4.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ks.html#SP4_2" class="named-paragraph-link"><span class="named-paragraph">Extract activations</span><span class="named-paragraph-number">4.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ks.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Extract activations</span><span class="named-paragraph-number">4.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kit_details</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-></span><span class="element-syntax">metadata_record</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"kit-details"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">kit_details</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="5-ks.html#SP4_3" class="named-paragraph-link"><span class="named-paragraph">Extract the kit details</span><span class="named-paragraph-number">4.3</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">kit_details</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="5-ks.html#SP4_2" class="named-paragraph-link"><span class="named-paragraph">Extract the kit details</span><span class="named-paragraph-number">4.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">needs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-></span><span class="element-syntax">metadata_record</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"needs"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">needs</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">needs</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_list</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ks.html#SP4_4" class="named-paragraph-link"><span class="named-paragraph">Extract this possibly conditional requirement</span><span class="named-paragraph-number">4.4</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ks.html#SP4_3" class="named-paragraph-link"><span class="named-paragraph">Extract this possibly conditional requirement</span><span class="named-paragraph-number">4.3</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4_1" class="paragraph-anchor"></a><b>§4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Extract compatibility</span><span class="named-paragraph-number">4.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">compatibility_specification</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CS</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Compatibility::from_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">compatibility</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">CS</span><span class="plain-syntax">) </span><span class="identifier-syntax">C</span><span class="plain-syntax">-></span><span class="element-syntax">edition</span><span class="plain-syntax">-></span><span class="element-syntax">compatibility</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CS</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="string-syntax">"cannot read compatibility '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">compatibility</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">METADATA_MALFORMED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">err</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ks.html#SP4">§4</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4_2" class="paragraph-anchor"></a><b>§4.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Extract activations</span><span class="named-paragraph-number">4.2</span></span><span class="comment-syntax"> =</span>
|
||||
<p class="commentary firstcommentary"><a id="SP4_1" class="paragraph-anchor"></a><b>§4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Extract activations</span><span class="named-paragraph-number">4.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -201,7 +184,7 @@ interactive fiction features of the compiler, but BasicInformKit does not.
|
|||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ks.html#SP4">§4</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4_3" class="paragraph-anchor"></a><b>§4.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Extract the kit details</span><span class="named-paragraph-number">4.3</span></span><span class="comment-syntax"> =</span>
|
||||
<p class="commentary firstcommentary"><a id="SP4_2" class="paragraph-anchor"></a><b>§4.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Extract the kit details</span><span class="named-paragraph-number">4.2</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -227,7 +210,7 @@ interactive fiction features of the compiler, but BasicInformKit does not.
|
|||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ks.html#SP4">§4</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4_4" class="paragraph-anchor"></a><b>§4.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Extract this possibly conditional requirement</span><span class="named-paragraph-number">4.4</span></span><span class="comment-syntax"> =</span>
|
||||
<p class="commentary firstcommentary"><a id="SP4_3" class="paragraph-anchor"></a><b>§4.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Extract this possibly conditional requirement</span><span class="named-paragraph-number">4.3</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -244,9 +227,9 @@ interactive fiction features of the compiler, but BasicInformKit does not.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">need_author</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">need_clause</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"author"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">need_version</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">need_clause</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"version"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">need_type</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"extension"</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ks.html#SP4_4_1" class="named-paragraph-link"><span class="named-paragraph">Deal with an extension dependency</span><span class="named-paragraph-number">4.4.1</span></a></span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ks.html#SP4_3_1" class="named-paragraph-link"><span class="named-paragraph">Deal with an extension dependency</span><span class="named-paragraph-number">4.3.1</span></a></span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">need_type</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"kit"</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ks.html#SP4_4_2" class="named-paragraph-link"><span class="named-paragraph">Deal with a kit dependency</span><span class="named-paragraph-number">4.4.2</span></a></span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ks.html#SP4_3_2" class="named-paragraph-link"><span class="named-paragraph">Deal with a kit dependency</span><span class="named-paragraph-number">4.3.2</span></a></span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="string-syntax">"a kit can only have extensions and kits as dependencies"</span><span class="plain-syntax">);</span>
|
||||
|
@ -256,7 +239,7 @@ interactive fiction features of the compiler, but BasicInformKit does not.
|
|||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ks.html#SP4">§4</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4_4_1" class="paragraph-anchor"></a><b>§4.4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Deal with an extension dependency</span><span class="named-paragraph-number">4.4.1</span></span><span class="comment-syntax"> =</span>
|
||||
<p class="commentary firstcommentary"><a id="SP4_3_1" class="paragraph-anchor"></a><b>§4.3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Deal with an extension dependency</span><span class="named-paragraph-number">4.3.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -269,11 +252,11 @@ interactive fiction features of the compiler, but BasicInformKit does not.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">extension_title</span><span class="plain-syntax"> = </span><span class="identifier-syntax">need_title</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">extension_author</span><span class="plain-syntax"> = </span><span class="identifier-syntax">need_author</span><span class="plain-syntax">?(</span><span class="identifier-syntax">need_author</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">):</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax"> = </span><a href="2-wrk.html#SP2" class="function-link"><span class="function-syntax">Works::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">extension_genre</span><span class="plain-syntax">, </span><span class="identifier-syntax">extension_title</span><span class="plain-syntax">, </span><span class="identifier-syntax">extension_author</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">need_version</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="5-ks.html#SP4_4_1_1" class="named-paragraph-link"><span class="named-paragraph">Add versioned extension</span><span class="named-paragraph-number">4.4.1.1</span></a></span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ks.html#SP4_4_1_2" class="named-paragraph-link"><span class="named-paragraph">Add unversioned extension</span><span class="named-paragraph-number">4.4.1.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">need_version</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="5-ks.html#SP4_3_1_1" class="named-paragraph-link"><span class="named-paragraph">Add versioned extension</span><span class="named-paragraph-number">4.3.1.1</span></a></span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ks.html#SP4_3_1_2" class="named-paragraph-link"><span class="named-paragraph">Add unversioned extension</span><span class="named-paragraph-number">4.3.1.2</span></a></span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ks.html#SP4_4">§4.4</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4_4_1_1" class="paragraph-anchor"></a><b>§4.4.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Add versioned extension</span><span class="named-paragraph-number">4.4.1.1</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ks.html#SP4_3">§4.3</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4_3_1_1" class="paragraph-anchor"></a><b>§4.3.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Add versioned extension</span><span class="named-paragraph-number">4.3.1.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -289,16 +272,16 @@ interactive fiction features of the compiler, but BasicInformKit does not.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">-></span><span class="element-syntax">extensions</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ks.html#SP4_4_1">§4.4.1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4_4_1_2" class="paragraph-anchor"></a><b>§4.4.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Add unversioned extension</span><span class="named-paragraph-number">4.4.1.2</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ks.html#SP4_3_1">§4.3.1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4_3_1_2" class="paragraph-anchor"></a><b>§4.3.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Add unversioned extension</span><span class="named-paragraph-number">4.3.1.2</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax"> = </span><a href="2-rqr.html#SP2" class="function-link"><span class="function-syntax">Requirements::any_version_of</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">work</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">-></span><span class="element-syntax">extensions</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ks.html#SP4_4_1">§4.4.1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4_4_2" class="paragraph-anchor"></a><b>§4.4.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Deal with a kit dependency</span><span class="named-paragraph-number">4.4.2</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ks.html#SP4_3_1">§4.3.1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4_3_2" class="paragraph-anchor"></a><b>§4.3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Deal with a kit dependency</span><span class="named-paragraph-number">4.3.2</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -317,13 +300,13 @@ interactive fiction features of the compiler, but BasicInformKit does not.
|
|||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ks.html#SP5" class="function-link"><span class="function-syntax">Kits::dependency</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">if_kit</span><span class="plain-syntax">, </span><span class="identifier-syntax">parity</span><span class="plain-syntax">, </span><span class="identifier-syntax">need_title</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ks.html#SP4_4">§4.4</a>.</li></ul>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ks.html#SP4_3">§4.3</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b>We provide if this then that, where <span class="extract"><span class="extract-syntax">inc</span></span> is true, and if this then not that,
|
||||
where it's false.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kits::dependency</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Kits::dependency</span></span>:<br/><a href="5-ks.html#SP4_4_2">§4.4.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_kit</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">if_text</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">inc</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">then_text</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kits::dependency</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Kits::dependency</span></span>:<br/><a href="5-ks.html#SP4_3_2">§4.3.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_kit</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">if_text</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">inc</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">then_text</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_kit_ittt</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ITTT</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">inform_kit_ittt</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ITTT</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">if_text</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ITTT</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_included</span><span class="plain-syntax"> = </span><span class="identifier-syntax">inc</span><span class="plain-syntax">;</span>
|
||||
|
@ -336,7 +319,7 @@ latter may not be useful in practice:
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kits::activation</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Kits::activation</span></span>:<br/><a href="5-ks.html#SP4_2">§4.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_kit</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">act</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kits::activation</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Kits::activation</span></span>:<br/><a href="5-ks.html#SP4_1">§4.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_kit</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">act</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">element_activation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">EA</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">element_activation</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">EA</span><span class="plain-syntax">-></span><span class="element-syntax">element_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">EA</span><span class="plain-syntax">-></span><span class="element-syntax">activate</span><span class="plain-syntax"> = </span><span class="identifier-syntax">act</span><span class="plain-syntax">;</span>
|
||||
|
@ -348,11 +331,11 @@ a kit, going only on a name such as <span class="extract"><span class="extract-s
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">inform_kit</span><span class="plain-syntax"> *</span><span class="function-syntax">Kits::find_by_name</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Kits::find_by_name</span></span>:<br/>Project Services - <a href="5-ps2.html#SP16">§16</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nest_list</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><a href="2-rqr.html#SP2" class="function-link"><span class="function-syntax">Requirements::any_version_of</span></a><span class="plain-syntax">(</span><a href="2-wrk.html#SP2" class="function-link"><span class="function-syntax">Works::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">kit_genre</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">""</span><span class="plain-syntax">));</span>
|
||||
<span class="reserved-syntax">inform_kit</span><span class="plain-syntax"> *</span><span class="function-syntax">Kits::find_by_name</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Kits::find_by_name</span></span>:<br/>Project Services - <a href="5-ps2.html#SP16">§16</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nest_list</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">req</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">req</span><span class="plain-syntax"> = </span><a href="2-rqr.html#SP2" class="function-link"><span class="function-syntax">Requirements::any_version_of</span></a><span class="plain-syntax">(</span><a href="2-wrk.html#SP2" class="function-link"><span class="function-syntax">Works::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">kit_genre</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">""</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><a href="2-nst.html#SP8" class="function-link"><span class="function-syntax">Nests::search_for_best</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="identifier-syntax">nest_list</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">R</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">Errors::fatal_with_text</span><span class="plain-syntax">(</span><span class="string-syntax">"cannot find kit '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">R</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">copy</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-km.html#SP3" class="function-link"><span class="function-syntax">KitManager::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -371,7 +354,7 @@ nothing to do, we return <span class="extract"><span class="extract-syntax">FALS
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">ITTT</span><span class="plain-syntax">-></span><span class="element-syntax">if_included</span><span class="plain-syntax"> == </span><span class="identifier-syntax">parity</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><a href="5-ps2.html#SP17" class="function-link"><span class="function-syntax">Projects::uses_kit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">, </span><span class="identifier-syntax">ITTT</span><span class="plain-syntax">-></span><span class="element-syntax">then_name</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><a href="5-ps2.html#SP17" class="function-link"><span class="function-syntax">Projects::uses_kit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">, </span><span class="identifier-syntax">ITTT</span><span class="plain-syntax">-></span><span class="element-syntax">if_name</span><span class="plain-syntax">) == </span><span class="identifier-syntax">ITTT</span><span class="plain-syntax">-></span><span class="element-syntax">if_included</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ps2.html#SP16" class="function-link"><span class="function-syntax">Projects::add_kit_dependency</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">, </span><span class="identifier-syntax">ITTT</span><span class="plain-syntax">-></span><span class="element-syntax">then_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ps2.html#SP16" class="function-link"><span class="function-syntax">Projects::add_kit_dependency</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">, </span><span class="identifier-syntax">ITTT</span><span class="plain-syntax">-></span><span class="element-syntax">then_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">changes_made</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">changes_made</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -60,7 +60,7 @@ function togglePopup(material_id) {
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inbuildn.html">Inbuild Modules</a></li><li><a href="index.html">supervisor</a></li><li><a href="index.html#5">Chapter 5: Genre Services</a></li><li><b>Language Services</b></li></ul></div>
|
||||
<p class="purpose">Behaviour specific to copies of the language genre.</p>
|
||||
|
||||
<ul class="toc"><li><a href="5-ls.html#SP1">§1. Scanning metadata</a></li><li><a href="5-ls.html#SP5">§5. Logging</a></li><li><a href="5-ls.html#SP6">§6. Language code</a></li><li><a href="5-ls.html#SP7">§7. Kit</a></li><li><a href="5-ls.html#SP8">§8. Finding by name</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="5-ls.html#SP1">§1. Scanning metadata</a></li><li><a href="5-ls.html#SP4">§4. Logging</a></li><li><a href="5-ls.html#SP5">§5. Language code</a></li><li><a href="5-ls.html#SP6">§6. Kit</a></li><li><a href="5-ls.html#SP7">§7. Finding by name</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Scanning metadata. </b>Metadata for natural languages is stored in the following structure.
|
||||
Inform can read and write text in multiple natural languages, though it
|
||||
|
@ -73,13 +73,15 @@ small resource folder called its "bundle". (This includes English.)
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">as_copy</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">instance_name</span><span class="plain-syntax">; </span><span class="comment-syntax"> instance name, e.g., "German language"</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nl_instance</span><span class="plain-syntax">; </span><span class="comment-syntax"> instance, e.g., "German language"</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">language_field</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_LANGUAGE_FIELDS</span><span class="plain-syntax">]; </span><span class="comment-syntax"> contents of the </span><span class="extract"><span class="extract-syntax">about.txt</span></span><span class="comment-syntax"> fields</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">adaptive_person</span><span class="plain-syntax">; </span><span class="comment-syntax"> which person (one of constants below) text subs are written from</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">iso_code</span><span class="plain-syntax">; </span><span class="comment-syntax"> e.g., "fr" or "de"</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">translated_name</span><span class="plain-syntax">; </span><span class="comment-syntax"> e.g., "Français" or "Deutsch"</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">native_cue</span><span class="plain-syntax">; </span><span class="comment-syntax"> e.g., "en français" or "in deutscher Sprache"</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">adaptive_person</span><span class="plain-syntax">; </span><span class="comment-syntax"> which person text substitutions are written from</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">Preform_loaded</span><span class="plain-syntax">; </span><span class="comment-syntax"> has a Preform syntax definition been read for this?</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure inform_language is accessed in 1/sm, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 5/es, 5/ks, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/tbs, 6/inc, 7/dct, 7/ip2 and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure inform_language is accessed in 1/sm, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 5/es, 5/ks, 5/ps, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 7/dct, 7/ip2 and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>This is called as soon as a new copy <span class="extract"><span class="extract-syntax">C</span></span> of the language genre is created.
|
||||
</p>
|
||||
|
||||
|
@ -89,7 +91,6 @@ small resource folder called its "bundle". (This includes English.)
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no copy to scan"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cps.html#SP4" class="function-link"><span class="function-syntax">Copies::set_metadata</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_inform_language</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">));</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">sentence_format</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">sentence_format</span><span class="plain-syntax">, </span><span class="string-syntax">"%S language"</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-></span><span class="element-syntax">edition</span><span class="plain-syntax">-></span><span class="element-syntax">work</span><span class="plain-syntax">-></span><span class="element-syntax">title</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">instance_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Feeds::feed_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">sentence_format</span><span class="plain-syntax">);</span>
|
||||
|
@ -97,80 +98,128 @@ small resource folder called its "bundle". (This includes English.)
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">nl_instance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">Preform_loaded</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">adaptive_person</span><span class="plain-syntax"> = -1; </span><span class="comment-syntax"> i.e., none yet specified</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">n</span><span class="plain-syntax"><</span><span class="constant-syntax">MAX_LANGUAGE_FIELDS</span><span class="plain-syntax">; </span><span class="identifier-syntax">n</span><span class="plain-syntax">++) </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">language_field</span><span class="plain-syntax">[</span><span class="identifier-syntax">n</span><span class="plain-syntax">] = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ls.html#SP2_2" class="named-paragraph-link"><span class="named-paragraph">Read the about.txt file for the bundle</span><span class="named-paragraph-number">2.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Found language bundle '%S' (%p)\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-></span><span class="element-syntax">edition</span><span class="plain-syntax">-></span><span class="element-syntax">work</span><span class="plain-syntax">-></span><span class="element-syntax">title</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ls.html#SP4" class="function-link"><span class="function-syntax">Languages::path_to_bundle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2_1" class="paragraph-anchor"></a><b>§2.1. </b>Within the bundle folder is a file called <span class="extract"><span class="extract-syntax">about.txt</span></span>, which sets numbered
|
||||
fields to excerpts of text. The following are the field numbers:
|
||||
</p>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax"> these defaults should always be overwritten</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">iso_code</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"en"</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">translated_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"English"</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax"> but not this one</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">native_cue</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">NAME_IN_ENGLISH_LFIELD</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> </span><span class="comment-syntax"> e.g. "German"</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">NAME_NATIVE_LFIELD</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax"> </span><span class="comment-syntax"> e.g. "Deutsch"</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">CUE_NATIVE_LFIELD</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span><span class="plain-syntax"> </span><span class="comment-syntax"> e.g. "in deutscher Sprache"</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">ISO_639_CODE_LFIELD</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span><span class="plain-syntax"> </span><span class="comment-syntax"> e.g. "de": an ISO 639-1 code</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">TRANSLATOR_LFIELD</span><span class="plain-syntax"> </span><span class="constant-syntax">5</span><span class="plain-syntax"> </span><span class="comment-syntax"> e.g. "Team GerX"</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">KIT_LFIELD</span><span class="plain-syntax"> </span><span class="constant-syntax">6</span><span class="plain-syntax"> </span><span class="comment-syntax"> e.g. "GermanLanguageKit"</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">MAX_LANGUAGE_FIELDS</span><span class="plain-syntax"> </span><span class="constant-syntax">7</span><span class="plain-syntax"> </span><span class="comment-syntax"> one more than the highest number above</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2_2" class="paragraph-anchor"></a><b>§2.2. </b>If we can't find the file, it doesn't matter except that all of the excerpts
|
||||
remain empty. But we may as well tell the debugging log.
|
||||
</p>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">about_file</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><a href="5-ls.html#SP3" class="function-link"><span class="function-syntax">Languages::path_to_bundle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="string-syntax">"about.txt"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TextFiles::exists</span><span class="plain-syntax">(</span><span class="identifier-syntax">about_file</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="string-syntax">"a language bundle should no longer use an 'about.txt' file"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">METADATA_MALFORMED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">err</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">MAX_BUNDLE_ABOUT_LINE_LENGTH</span><span class="plain-syntax"> </span><span class="constant-syntax">256</span><span class="plain-syntax"> </span><span class="comment-syntax"> which is far more than necessary, really</span>
|
||||
</pre>
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Read the about.txt file for the bundle</span><span class="named-paragraph-number">2.2</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">about_file</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><a href="5-ls.html#SP4" class="function-link"><span class="function-syntax">Languages::path_to_bundle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="string-syntax">"about.txt"</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TextFiles::read</span><span class="plain-syntax">(</span><span class="identifier-syntax">about_file</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><a href="5-ls.html#SP3" class="function-link"><span class="function-syntax">Languages::read_metadata</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Can't find about file: %f\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">about_file</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ls.html#SP2">§2</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>The format of the file is very simple. Each line is introduced by a number
|
||||
from 1 to <span class="extract"><span class="extract-syntax">MAX_LANGUAGE_FIELDS</span></span> minus one, and then contains text which
|
||||
extends for the rest of the line.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Languages::read_metadata</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Languages::read_metadata</span></span>:<br/><a href="5-ls.html#SP2_2">§2.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">item_name</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vnl</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">vnl</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Feeds::feed_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">item_name</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ve</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lexer::word</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">field</span><span class="plain-syntax"> = -1;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">ve</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">Vocabulary::test_vflags</span><span class="plain-syntax">(</span><span class="identifier-syntax">ve</span><span class="plain-syntax">, </span><span class="identifier-syntax">NUMBER_MC</span><span class="plain-syntax">)))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">field</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Vocabulary::get_literal_number_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">ve</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">field</span><span class="plain-syntax"> >= </span><span class="constant-syntax">1</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">field</span><span class="plain-syntax"> < </span><span class="constant-syntax">MAX_LANGUAGE_FIELDS</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">language_field</span><span class="plain-syntax">[</span><span class="identifier-syntax">field</span><span class="plain-syntax">] =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Wordings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)+1, </span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Warning: couldn't read about.txt line: %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">item_name</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-></span><span class="element-syntax">location_if_path</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"language_metadata.json"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TextFiles::exists</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-jm.html#SP1" class="function-link"><span class="function-syntax">JSONMetadata::read_metadata_file</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax">-></span><span class="element-syntax">metadata_record</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">language_details</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-></span><span class="element-syntax">metadata_record</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"language-details"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">language_details</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="5-ls.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Extract the language details</span><span class="named-paragraph-number">2.1</span></a></span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="string-syntax">"'language_metadata.json' must contain a \"language-details\" field"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">METADATA_MALFORMED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">err</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">needs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">-></span><span class="element-syntax">metadata_record</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"needs"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">needs</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">expected</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">expected</span><span class="plain-syntax">, </span><span class="string-syntax">"%SLanguageKit"</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-></span><span class="element-syntax">edition</span><span class="plain-syntax">-></span><span class="element-syntax">work</span><span class="plain-syntax">-></span><span class="element-syntax">title</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">found_expected</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">needs</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_list</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ls.html#SP2_2" class="named-paragraph-link"><span class="named-paragraph">Extract this requirement</span><span class="named-paragraph-number">2.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">found_expected</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="string-syntax">"language bundle must have dependency on '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">expected</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">METADATA_MALFORMED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">err</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">expected</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="string-syntax">"'language_metadata.json' must contain a \"needs\" field"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">METADATA_MALFORMED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">err</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="string-syntax">"a language bundle must now provide a 'language_metadata.json' file"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">METADATA_MALFORMED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">err</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP2_1" class="paragraph-anchor"></a><b>§2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Extract the language details</span><span class="named-paragraph-number">2.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Languages::path_to_bundle</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Languages::path_to_bundle</span></span>:<br/><a href="5-ls.html#SP2">§2</a>, <a href="5-ls.html#SP2_2">§2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">translated_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">language_details</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"translated-name"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">translated_name</span><span class="plain-syntax">) </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">translated_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">translated_name</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">iso_code</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">language_details</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"iso-639-1-code"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">iso_code</span><span class="plain-syntax">) </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">iso_code</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">iso_code</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">translated_syntax_cue</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">language_details</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"translated-syntax-cue"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">translated_syntax_cue</span><span class="plain-syntax">) </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">native_cue</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">translated_syntax_cue</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ls.html#SP2">§2</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2_2" class="paragraph-anchor"></a><b>§2.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Extract this requirement</span><span class="named-paragraph-number">2.2</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">if_clause</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"if"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">unless_clause</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"unless"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">if_clause</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">unless_clause</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="string-syntax">"a language bundle's needs must be unconditional"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">METADATA_MALFORMED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">err</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">need_clause</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"need"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">need_clause</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">need_type</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">need_clause</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"type"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">need_title</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">need_clause</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"title"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">need_version_range</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">need_clause</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"version-range"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">need_type</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"kit"</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">expected</span><span class="plain-syntax">, </span><span class="identifier-syntax">need_title</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">)) </span><span class="identifier-syntax">found_expected</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">need_version_range</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="string-syntax">"version ranges on kit dependencies are not yet implemented"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">METADATA_MALFORMED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">err</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="string-syntax">"a language can only have kits as dependencies"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">METADATA_MALFORMED_CE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">err</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ls.html#SP2">§2</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="function-syntax">Languages::path_to_bundle</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Languages::path_to_bundle</span></span>:<br/><a href="5-ls.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">-></span><span class="element-syntax">location_if_path</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Logging. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. Logging. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Languages::log</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Languages::log</span></span>:<br/>Supervisor Module - <a href="1-sm.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">opts</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vL</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Languages::log</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Languages::log</span></span>:<br/>Supervisor Module - <a href="1-sm.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">opts</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vL</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">vL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) { </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"<null-language>"</span><span class="plain-syntax">); }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> { </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">-></span><span class="identifier-syntax">edition</span><span class="plain-syntax">-></span><span class="element-syntax">work</span><span class="plain-syntax">-></span><span class="element-syntax">title</span><span class="plain-syntax">); }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. Language code. </b>This is used when we write the bibliographic data for the work of IF we're
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Language code. </b>This is used when we write the bibliographic data for the work of IF we're
|
||||
making; this enables online databases like IFDB, and smart interpreters, to
|
||||
detect the language of play for a story file without actually running it.
|
||||
</p>
|
||||
|
@ -180,25 +229,39 @@ detect the language of play for a story file without actually running it.
|
|||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">DefaultLanguage::get</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">language_field</span><span class="plain-syntax">[</span><span class="constant-syntax">ISO_639_CODE_LFIELD</span><span class="plain-syntax">]))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%+W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">language_field</span><span class="plain-syntax">[</span><span class="constant-syntax">ISO_639_CODE_LFIELD</span><span class="plain-syntax">]);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"en"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">iso_code</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. Kit. </b>Each language needs its own kit of Inter code, named as follows:
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. Kit. </b>Each language needs its own kit(s) of Inter code, given in the dependencies:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Languages::kit_name</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Languages::kit_name</span></span>:<br/>Project Services - <a href="5-ps2.html#SP18_1">§18.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">language_field</span><span class="plain-syntax">[</span><span class="constant-syntax">KIT_LFIELD</span><span class="plain-syntax">]))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="string-syntax">"%+W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">language_field</span><span class="plain-syntax">[</span><span class="constant-syntax">KIT_LFIELD</span><span class="plain-syntax">]);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="string-syntax">"%+WLanguageKit"</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">language_field</span><span class="plain-syntax">[</span><span class="constant-syntax">NAME_IN_ENGLISH_LFIELD</span><span class="plain-syntax">]);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">T</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Languages::add_kit_dependencies_to_project</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Languages::add_kit_dependencies_to_project</span></span>:<br/>Project Services - <a href="5-ps2.html#SP18_1">§18.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">project</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no language"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">md</span><span class="plain-syntax"> = </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">-></span><span class="identifier-syntax">metadata_record</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">md</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">; </span><span class="comment-syntax"> should never happen, but fail safe</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">needs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"needs"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">needs</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">; </span><span class="comment-syntax"> should never happen, but fail safe</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">needs</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_list</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">need_clause</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"need"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">need_clause</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">need_type</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">need_clause</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"type"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">need_title</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">need_clause</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"title"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="identifier-syntax">need_version</span><span class="plain-syntax"> = </span><span class="identifier-syntax">JSON::look_up_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">need_clause</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"version"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">need_type</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"kit"</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_work</span><span class="plain-syntax"> *</span><span class="identifier-syntax">work</span><span class="plain-syntax"> = </span><a href="2-wrk.html#SP2" class="function-link"><span class="function-syntax">Works::new_raw</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">kit_genre</span><span class="plain-syntax">, </span><span class="identifier-syntax">need_title</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">""</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">need_version</span><span class="plain-syntax">) </span><span class="identifier-syntax">req</span><span class="plain-syntax"> = </span><a href="2-rqr.html#SP2" class="function-link"><span class="function-syntax">Requirements::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">work</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">VersionNumberRanges::compatibility_range</span><span class="plain-syntax">(</span><span class="identifier-syntax">VersionNumbers::from_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">need_version</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">)));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax"> = </span><a href="2-rqr.html#SP2" class="function-link"><span class="function-syntax">Requirements::any_version_of</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">work</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ps2.html#SP16" class="function-link"><span class="function-syntax">Projects::add_kit_dependency</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">, </span><span class="identifier-syntax">need_title</span><span class="plain-syntax">-></span><span class="identifier-syntax">if_string</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. Finding by name. </b>Given the name of a natural language (e.g., "German") we find the
|
||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. Finding by name. </b>Given the name of a natural language (e.g., "German") we find the
|
||||
corresponding definition. That will mean searching for a copy, and that
|
||||
raises the question of where to look — in particular, it's important to
|
||||
include the Materials folder for any relevant project.
|
||||
|
@ -206,30 +269,32 @@ include the Materials folder for any relevant project.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">search_list_for_Preform_callback</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Languages::read_Preform_definition</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Languages::read_Preform_definition</span></span>:<br/>Extension Services - <a href="5-es.html#SP7">§7</a><br/>Project Services - <a href="5-ps2.html#SP29">§29</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Languages::read_Preform_definition</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Languages::read_Preform_definition</span></span>:<br/>Extension Services - <a href="5-es.html#SP7">§7</a><br/>Project Services - <a href="5-ps2.html#SP29">§29</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no language"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="identifier-syntax">Preform_loaded</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="identifier-syntax">Preform_loaded</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">search_list_for_Preform_callback</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> (*</span><span class="identifier-syntax">shared_preform_callback</span><span class="plain-syntax">)(</span><span class="identifier-syntax">L</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = (*</span><span class="identifier-syntax">shared_preform_callback</span><span class="plain-syntax">)(</span><span class="identifier-syntax">L</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. </b>This function is called only from Preform...
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. </b>This function is called only from Preform...
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">PREFORM_LANGUAGE_FROM_NAME_WORDS_CALLBACK</span><span class="plain-syntax"> </span><a href="5-ls.html#SP9" class="function-link"><span class="function-syntax">Languages::Preform_find</span></a>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">PREFORM_LANGUAGE_FROM_NAME_WORDS_CALLBACK</span><span class="plain-syntax"> </span><a href="5-ls.html#SP8" class="function-link"><span class="function-syntax">Languages::Preform_find</span></a>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="function-syntax">Languages::Preform_find</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-ls.html#SP10" class="function-link"><span class="function-syntax">Languages::find_for</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">search_list_for_Preform_callback</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-ls.html#SP9" class="function-link"><span class="function-syntax">Languages::find_for</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">search_list_for_Preform_callback</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. </b>...but this one is more generally available.
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. </b>...but this one is more generally available.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="function-syntax">Languages::find_for</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Languages::find_for</span></span>:<br/><a href="5-ls.html#SP9">§9</a><br/>Extension Services - <a href="5-es.html#SP7">§7</a><br/>Project Services - <a href="5-ps2.html#SP13">§13</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">search</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="function-syntax">Languages::find_for</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Languages::find_for</span></span>:<br/><a href="5-ls.html#SP8">§8</a><br/>Extension Services - <a href="5-es.html#SP7">§7</a><br/>Project Services - <a href="5-ps2.html#SP13">§13</a>, <a href="5-ps2.html#SP29">§29</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">search</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><a href="2-rqr.html#SP2" class="function-link"><span class="function-syntax">Requirements::any_version_of</span></a><span class="plain-syntax">(</span><a href="2-wrk.html#SP2" class="function-link"><span class="function-syntax">Works::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">language_genre</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">""</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><a href="2-nst.html#SP8" class="function-link"><span class="function-syntax">Nests::search_for_best</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="identifier-syntax">search</span><span class="plain-syntax">);</span>
|
||||
|
@ -237,6 +302,22 @@ include the Materials folder for any relevant project.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. </b>Or we can convert the native cue, <span class="extract"><span class="extract-syntax">en français</span></span>, to the name, <span class="extract"><span class="extract-syntax">French</span></span>:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Languages::find_by_native_cue</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Languages::find_by_native_cue</span></span>:<br/>Project Services - <a href="5-ps2.html#SP13">§13</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cue</span><span class="plain-syntax">, </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">search</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">results</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-nst.html#SP7" class="function-link"><span class="function-syntax">Nests::search_for</span></a><span class="plain-syntax">(</span><a href="2-rqr.html#SP2" class="function-link"><span class="function-syntax">Requirements::anything_of_genre</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">language_genre</span><span class="plain-syntax">), </span><span class="identifier-syntax">search</span><span class="plain-syntax">, </span><span class="identifier-syntax">results</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax"> *</span><span class="identifier-syntax">search_result</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">search_result</span><span class="plain-syntax">, </span><span class="reserved-syntax">inbuild_search_result</span><span class="plain-syntax">, </span><span class="identifier-syntax">results</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><a href="4-lm.html#SP3" class="function-link"><span class="function-syntax">LanguageManager::from_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">search_result</span><span class="plain-syntax">-></span><span class="element-syntax">copy</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">cue</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">native_cue</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">-></span><span class="element-syntax">edition</span><span class="plain-syntax">-></span><span class="element-syntax">work</span><span class="plain-syntax">-></span><span class="element-syntax">title</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. </b>Finally, the following Preform nonterminal matches the English-language
|
||||
name of a language: for example, "French". Unlike the above functions, it
|
||||
looks only at languages already loaded, and doesn't scan nests for more.
|
||||
|
|
|
@ -72,7 +72,7 @@ in the following structure.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">inform_pipeline</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure inform_pipeline is accessed in 1/sm, 2/edt, 2/rqr, 2/nst, 2/jm, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 5/es, 5/ks, 5/ls, 5/ps2, 5/ts, 6/st, 6/hdn, 6/tbs, 6/inc, 6/vmg, 7/dct, 7/ip, 7/ip2 and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure inform_pipeline is accessed in 1/sm, 2/edt, 2/rqr, 2/nst, 2/jm, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 5/es, 5/ks, 5/ls, 5/ps2, 5/ts, 6/st, 6/hdn, 6/inc, 6/vmg, 7/dct, 7/ip, 7/ip2 and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>This is called as soon as a new copy <span class="extract"><span class="extract-syntax">C</span></span> of the language genre is created.
|
||||
</p>
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ function togglePopup(material_id) {
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inbuildn.html">Inbuild Modules</a></li><li><a href="index.html">supervisor</a></li><li><a href="index.html#5">Chapter 5: Genre Services</a></li><li><b>Project Services</b></li></ul></div>
|
||||
<p class="purpose">Behaviour specific to copies of either the projectbundle or projectfile genres.</p>
|
||||
|
||||
<ul class="toc"><li><a href="5-ps2.html#SP1">§1. Scanning metadata</a></li><li><a href="5-ps2.html#SP7">§7. Files of source text</a></li><li><a href="5-ps2.html#SP10">§10. The project's languages</a></li><li><a href="5-ps2.html#SP14">§14. Miscellaneous metadata</a></li><li><a href="5-ps2.html#SP15">§15. Kit dependencies</a></li><li><a href="5-ps2.html#SP19">§19. Things to do with kits</a></li><li><a href="5-ps2.html#SP25">§25. File to write to</a></li><li><a href="5-ps2.html#SP26">§26. The full graph</a></li><li><a href="5-ps2.html#SP29">§29. Reading the source text</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="5-ps2.html#SP1">§1. Scanning metadata</a></li><li><a href="5-ps2.html#SP7">§7. Files of source text</a></li><li><a href="5-ps2.html#SP10">§10. The project's languages</a></li><li><a href="5-ps2.html#SP14">§14. Miscellaneous metadata</a></li><li><a href="5-ps2.html#SP15">§15. Kit dependencies</a></li><li><a href="5-ps2.html#SP19">§19. Things to do with kits</a></li><li><a href="5-ps2.html#SP25">§25. File to write to</a></li><li><a href="5-ps2.html#SP26">§26. The full graph</a></li><li><a href="5-ps2.html#SP29">§29. Reading the source text</a></li><li><a href="5-ps2.html#SP30">§30. The bibliographic sentence</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Scanning metadata. </b>Metadata for pipelines — or rather, the complete lack of same — is stored
|
||||
in the following structure.
|
||||
|
@ -76,7 +76,9 @@ in the following structure.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">version</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">source_vertices</span><span class="plain-syntax">; </span><span class="comment-syntax"> of </span><span class="extract"><span class="extract-syntax">build_vertex</span></span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kits_to_include</span><span class="plain-syntax">; </span><span class="comment-syntax"> of </span><span class="extract"><span class="extract-syntax">kit_dependency</span></span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name_of_language_of_play</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">language_of_play</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">clue_for_language_of_syntax</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">language_of_syntax</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">language_of_index</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">unblorbed_vertex</span><span class="plain-syntax">;</span>
|
||||
|
@ -90,7 +92,7 @@ in the following structure.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">inform_project</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure inform_project is accessed in 1/sm, 2/edt, 2/rqr, 2/nst, 2/jm, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 4/pbm, 4/pfm, 5/es, 5/ks, 5/ls, 5/ps, 5/ts, 6/st, 6/hdn, 6/tbs, 6/inc, 6/vmg, 7/tm, 7/dct, 7/cns, 7/ip, 7/ip2 and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure inform_project is accessed in 1/sm, 2/edt, 2/rqr, 2/nst, 2/jm, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 4/pbm, 4/pfm, 5/es, 5/ks, 5/ls, 5/ps, 5/ts, 6/st, 6/hdn, 6/inc, 6/vmg, 7/tm, 7/dct, 7/cns, 7/ip, 7/ip2 and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>This is called as soon as a new copy <span class="extract"><span class="extract-syntax">C</span></span> of the language genre is created.
|
||||
It doesn't actually do any scanning to speak of, in fact: we may eventually
|
||||
learn a lot about the project, but for now we simply initialise to bland
|
||||
|
@ -107,7 +109,9 @@ placeholders.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="identifier-syntax">version</span><span class="plain-syntax"> = </span><span class="identifier-syntax">VersionNumbers::null</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="identifier-syntax">source_vertices</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="identifier-syntax">kits_to_include</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">kit_dependency</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_of_language_of_play</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"English"</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="identifier-syntax">language_of_play</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="identifier-syntax">clue_for_language_of_syntax</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="identifier-syntax">language_of_syntax</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="identifier-syntax">language_of_index</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="identifier-syntax">chosen_build_target</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
|
@ -128,6 +132,7 @@ placeholders.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="identifier-syntax">search_list</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_nest</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="identifier-syntax">primary_source</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="identifier-syntax">extensions_included</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">inform_extension</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ps2.html#SP30" class="function-link"><span class="function-syntax">Projects::scan_bibliographic_data</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>The materials folder sits alongside the project and has the same name,
|
||||
|
@ -198,7 +203,7 @@ reasons, this list is created on demand.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="function-syntax">Projects::nest_list</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Projects::nest_list</span></span>:<br/><a href="5-ps2.html#SP13">§13</a>, <a href="5-ps2.html#SP16">§16</a><br/>Incremental Building - <a href="3-ib.html#SP7_1">§7.1</a><br/>Inform7 Skill - <a href="3-is2.html#SP1">§1</a><br/>Inclusions - <a href="6-inc.html#SP5_1">§5.1</a>, <a href="6-inc.html#SP5_1_2">§5.1.2</a><br/>Census - <a href="7-cns.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="function-syntax">Projects::nest_list</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Projects::nest_list</span></span>:<br/><a href="5-ps2.html#SP13">§13</a>, <a href="5-ps2.html#SP16">§16</a>, <a href="5-ps2.html#SP29">§29</a><br/>Incremental Building - <a href="3-ib.html#SP7_1">§7.1</a><br/>Inform7 Skill - <a href="3-is2.html#SP1">§1</a><br/>Inclusions - <a href="6-inc.html#SP5_1">§5.1</a>, <a href="6-inc.html#SP5_1_2">§5.1.2</a><br/>Census - <a href="7-cns.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">proj</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="1-ic.html#SP14" class="function-link"><span class="function-syntax">Supervisor::shared_nest_list</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RUN_ONLY_FROM_PHASE</span><span class="plain-syntax">(</span><span class="constant-syntax">NESTED_INBUILD_PHASE</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">search_list</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
|
@ -232,7 +237,7 @@ the outcome.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="function-syntax">Projects::source</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Projects::source</span></span>:<br/><a href="5-ps2.html#SP9">§9</a>, <a href="5-ps2.html#SP26_2_1">§26.2.1</a>, <a href="5-ps2.html#SP29_2">§29.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="function-syntax">Projects::source</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Projects::source</span></span>:<br/><a href="5-ps2.html#SP9">§9</a>, <a href="5-ps2.html#SP26_2_1">§26.2.1</a>, <a href="5-ps2.html#SP29_2">§29.2</a>, <a href="5-ps2.html#SP30">§30</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">proj</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">source_vertices</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ps2.html#SP8_1" class="named-paragraph-link"><span class="named-paragraph">Try a set of source files from the Source subdirectory of Materials</span><span class="named-paragraph-number">8.1</span></a></span><span class="plain-syntax">;</span>
|
||||
|
@ -332,10 +337,6 @@ at run-time.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::set_language_of_play</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Projects::set_language_of_play</span></span>:<br/>The Bibliographic Sentence - <a href="6-tbs.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">proj</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no project"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="identifier-syntax">language_of_play</span><span class="plain-syntax"> = </span><span class="identifier-syntax">L</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="function-syntax">Projects::get_language_of_play</span><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">proj</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">language_of_play</span><span class="plain-syntax">;</span>
|
||||
|
@ -360,27 +361,49 @@ project is written. For the Basic Inform extension, for example, it is English.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::set_language_of_syntax</span><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">proj</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no project"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="identifier-syntax">language_of_syntax</span><span class="plain-syntax"> = </span><span class="identifier-syntax">L</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="function-syntax">Projects::get_language_of_syntax</span><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">proj</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">language_of_syntax</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>§13. </b>And this is where these are decided.
|
||||
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>§13. </b>And this is where the languages of play and syntax are set, using metadata
|
||||
previously extracted by <a href="5-ps2.html#SP30" class="internal">Projects::scan_bibliographic_data</a>. Note that they
|
||||
are set only once, and can't be changed after that.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::set_languages</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Projects::set_languages</span></span>:<br/><a href="5-ps2.html#SP14">§14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::set_languages</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Projects::set_languages</span></span>:<br/><a href="5-ps2.html#SP14">§14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">proj</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no project"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="5-ls.html#SP10" class="function-link"><span class="function-syntax">Languages::find_for</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"English"</span><span class="plain-syntax">, </span><a href="5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::nest_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">language_of_play</span><span class="plain-syntax"> = </span><span class="identifier-syntax">E</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">language_of_syntax</span><span class="plain-syntax"> = </span><span class="identifier-syntax">E</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">language_of_index</span><span class="plain-syntax"> = </span><span class="identifier-syntax">E</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"built-in English language definition can't be found"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"English"</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S_clue</span><span class="plain-syntax"> = </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">clue_for_language_of_syntax</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">S_clue</span><span class="plain-syntax">) > </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">S_name</span><span class="plain-syntax"> = </span><a href="5-ls.html#SP10" class="function-link"><span class="function-syntax">Languages::find_by_native_cue</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S_clue</span><span class="plain-syntax">, </span><a href="5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::nest_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">S_name</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">language_of_syntax</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">language_of_syntax</span><span class="plain-syntax"> = </span><a href="5-ls.html#SP9" class="function-link"><span class="function-syntax">Languages::find_for</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S_name</span><span class="plain-syntax">, </span><a href="5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::nest_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">language_of_syntax</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bad_language</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">S_name</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">S_clue</span><span class="plain-syntax">) > </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">bad_language</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">bad_language</span><span class="plain-syntax">, </span><span class="string-syntax">"language meant by '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">S_clue</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">RV</span><span class="plain-syntax"> = </span><a href="3-bg.html#SP2" class="function-link"><span class="function-syntax">Graphs::req_vertex</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><a href="2-rqr.html#SP2" class="function-link"><span class="function-syntax">Requirements::any_version_of</span></a><span class="plain-syntax">(</span><a href="2-wrk.html#SP2" class="function-link"><span class="function-syntax">Works::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">language_genre</span><span class="plain-syntax">, </span><span class="identifier-syntax">bad_language</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">""</span><span class="plain-syntax">)));</span>
|
||||
<span class="plain-syntax"> </span><a href="3-bg.html#SP4" class="function-link"><span class="function-syntax">Graphs::need_this_to_build</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">-></span><span class="element-syntax">vertex</span><span class="plain-syntax">, </span><span class="identifier-syntax">RV</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">name_of_language_of_play</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">language_of_play</span><span class="plain-syntax"> = </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">language_of_syntax</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">name_of_language_of_play</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><a href="5-ls.html#SP9" class="function-link"><span class="function-syntax">Languages::find_for</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><a href="5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::nest_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">language_of_play</span><span class="plain-syntax"> = </span><span class="identifier-syntax">L</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">RV</span><span class="plain-syntax"> = </span><a href="3-bg.html#SP2" class="function-link"><span class="function-syntax">Graphs::req_vertex</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><a href="2-rqr.html#SP2" class="function-link"><span class="function-syntax">Requirements::any_version_of</span></a><span class="plain-syntax">(</span><a href="2-wrk.html#SP2" class="function-link"><span class="function-syntax">Works::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">language_genre</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">""</span><span class="plain-syntax">)));</span>
|
||||
<span class="plain-syntax"> </span><a href="3-bg.html#SP4" class="function-link"><span class="function-syntax">Graphs::need_this_to_build</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">-></span><span class="element-syntax">vertex</span><span class="plain-syntax">, </span><span class="identifier-syntax">RV</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="identifier-syntax">language_of_index</span><span class="plain-syntax"> = </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">language_of_syntax</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>§14. Miscellaneous metadata. </b>The following function transfers some of the command-line options into settings
|
||||
|
@ -394,7 +417,7 @@ and that means it's not beneath our notice.)
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::set_compilation_options</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Projects::set_compilation_options</span></span>:<br/>Inbuild Control - <a href="1-ic.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">co</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rng</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::set_compilation_options</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Projects::set_compilation_options</span></span>:<br/>Inbuild Control - <a href="1-ic.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">co</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rng</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="identifier-syntax">compile_for_release</span><span class="plain-syntax"> = </span><span class="identifier-syntax">r</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="identifier-syntax">compile_only</span><span class="plain-syntax"> = </span><span class="identifier-syntax">co</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="identifier-syntax">fix_rng</span><span class="plain-syntax"> = </span><span class="identifier-syntax">rng</span><span class="plain-syntax">;</span>
|
||||
|
@ -402,7 +425,7 @@ and that means it's not beneath our notice.)
|
|||
<span class="plain-syntax"> </span><a href="1-ic.html#SP20" class="function-link"><span class="function-syntax">Supervisor::pass_kit_requests</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::currently_releasing</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Projects::currently_releasing</span></span>:<br/>Headings - <a href="6-hdn.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::currently_releasing</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Projects::currently_releasing</span></span>:<br/>Headings - <a href="6-hdn.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">proj</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">compile_for_release</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -424,21 +447,29 @@ at least one kit, and probably several.
|
|||
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>§16. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::add_kit_dependency</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">Projects::add_kit_dependency</span></span>:<br/><a href="5-ps2.html#SP18_1">§18.1</a><br/>Inbuild Control - <a href="1-ic.html#SP20">§20</a><br/>Kit Services - <a href="5-ks.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">project</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kit_name</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">because_of_language</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_kit</span><span class="plain-syntax"> *</span><span class="identifier-syntax">because_of_kit</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::add_kit_dependency</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Projects::add_kit_dependency</span></span>:<br/><a href="5-ps2.html#SP18_1">§18.1</a><br/>Inbuild Control - <a href="1-ic.html#SP20">§20</a><br/>Kit Services - <a href="5-ks.html#SP8">§8</a><br/>Language Services - <a href="5-ls.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">project</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kit_name</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">because_of_language</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_kit</span><span class="plain-syntax"> *</span><span class="identifier-syntax">because_of_kit</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-ps2.html#SP17" class="function-link"><span class="function-syntax">Projects::uses_kit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">, </span><span class="identifier-syntax">kit_name</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">kit_dependency</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">kit_dependency</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kd</span><span class="plain-syntax">-></span><span class="element-syntax">kit</span><span class="plain-syntax"> = </span><a href="5-ks.html#SP7" class="function-link"><span class="function-syntax">Kits::find_by_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">kit_name</span><span class="plain-syntax">, </span><a href="5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::nest_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kd</span><span class="plain-syntax">-></span><span class="element-syntax">because_of_language</span><span class="plain-syntax"> = </span><span class="identifier-syntax">because_of_language</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kd</span><span class="plain-syntax">-></span><span class="element-syntax">because_of_kit</span><span class="plain-syntax"> = </span><span class="identifier-syntax">because_of_kit</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">kd</span><span class="plain-syntax">, </span><span class="reserved-syntax">kit_dependency</span><span class="plain-syntax">, </span><span class="identifier-syntax">project</span><span class="plain-syntax">-></span><span class="element-syntax">kits_to_include</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_kit</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><a href="5-ks.html#SP7" class="function-link"><span class="function-syntax">Kits::find_by_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">kit_name</span><span class="plain-syntax">, </span><a href="5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::nest_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">), </span><span class="identifier-syntax">req</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">kit_dependency</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">kit_dependency</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kd</span><span class="plain-syntax">-></span><span class="element-syntax">kit</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kd</span><span class="plain-syntax">-></span><span class="element-syntax">because_of_language</span><span class="plain-syntax"> = </span><span class="identifier-syntax">because_of_language</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kd</span><span class="plain-syntax">-></span><span class="element-syntax">because_of_kit</span><span class="plain-syntax"> = </span><span class="identifier-syntax">because_of_kit</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">kd</span><span class="plain-syntax">, </span><span class="reserved-syntax">kit_dependency</span><span class="plain-syntax">, </span><span class="identifier-syntax">project</span><span class="plain-syntax">-></span><span class="element-syntax">kits_to_include</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">RV</span><span class="plain-syntax"> = </span><a href="3-bg.html#SP2" class="function-link"><span class="function-syntax">Graphs::req_vertex</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><a href="2-rqr.html#SP2" class="function-link"><span class="function-syntax">Requirements::any_version_of</span></a><span class="plain-syntax">(</span><a href="2-wrk.html#SP2" class="function-link"><span class="function-syntax">Works::new_raw</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">kit_genre</span><span class="plain-syntax">, </span><span class="identifier-syntax">kit_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">""</span><span class="plain-syntax">)));</span>
|
||||
<span class="plain-syntax"> </span><a href="3-bg.html#SP4" class="function-link"><span class="function-syntax">Graphs::need_this_to_build</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">-></span><span class="element-syntax">vertex</span><span class="plain-syntax">, </span><span class="identifier-syntax">RV</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>§17. </b>This can also be used to test on the fly:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::uses_kit</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Projects::uses_kit</span></span>:<br/><a href="5-ps2.html#SP16">§16</a><br/>Kit Services - <a href="5-ks.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">project</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::uses_kit</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">Projects::uses_kit</span></span>:<br/><a href="5-ps2.html#SP16">§16</a><br/>Kit Services - <a href="5-ks.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">project</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">kit_dependency</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kd</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">kd</span><span class="plain-syntax">, </span><span class="reserved-syntax">kit_dependency</span><span class="plain-syntax">, </span><span class="identifier-syntax">project</span><span class="plain-syntax">-></span><span class="element-syntax">kits_to_include</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">kd</span><span class="plain-syntax">-></span><span class="element-syntax">kit</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">-></span><span class="element-syntax">edition</span><span class="plain-syntax">-></span><span class="element-syntax">work</span><span class="plain-syntax">-></span><span class="element-syntax">title</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">))</span>
|
||||
|
@ -450,7 +481,7 @@ at least one kit, and probably several.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::finalise_kit_dependencies</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Projects::finalise_kit_dependencies</span></span>:<br/><a href="5-ps2.html#SP26">§26</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">project</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::finalise_kit_dependencies</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Projects::finalise_kit_dependencies</span></span>:<br/><a href="5-ps2.html#SP26">§26</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">project</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ps2.html#SP18_1" class="named-paragraph-link"><span class="named-paragraph">Add dependencies for the standard kits</span><span class="named-paragraph-number">18.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">parity</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="named-paragraph-container code-font"><a href="5-ps2.html#SP18_2" class="named-paragraph-link"><span class="named-paragraph">Perform if-this-then-that</span><span class="named-paragraph-number">18.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parity</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="named-paragraph-container code-font"><a href="5-ps2.html#SP18_2" class="named-paragraph-link"><span class="named-paragraph">Perform if-this-then-that</span><span class="named-paragraph-number">18.2</span></a></span><span class="plain-syntax">;</span>
|
||||
|
@ -473,14 +504,12 @@ on <a href="../WorldModelKit/index.html" class="internal">WorldModelKit</a>, thr
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">no_word_from_user</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">-></span><span class="element-syntax">kits_to_include</span><span class="plain-syntax">) > </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">no_word_from_user</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ps2.html#SP16" class="function-link"><span class="function-syntax">Projects::add_kit_dependency</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"BasicInformKit"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ps2.html#SP16" class="function-link"><span class="function-syntax">Projects::add_kit_dependency</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"BasicInformKit"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">project</span><span class="plain-syntax">-></span><span class="element-syntax">language_of_play</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kit_name</span><span class="plain-syntax"> = </span><a href="5-ls.html#SP7" class="function-link"><span class="function-syntax">Languages::kit_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ps2.html#SP16" class="function-link"><span class="function-syntax">Projects::add_kit_dependency</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">, </span><span class="identifier-syntax">kit_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax">) </span><a href="5-ls.html#SP6" class="function-link"><span class="function-syntax">Languages::add_kit_dependencies_to_project</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="identifier-syntax">project</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no language of play"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">no_word_from_user</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ps2.html#SP16" class="function-link"><span class="function-syntax">Projects::add_kit_dependency</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"CommandParserKit"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ps2.html#SP16" class="function-link"><span class="function-syntax">Projects::add_kit_dependency</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"CommandParserKit"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ps2.html#SP18">§18</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP18_2" class="paragraph-anchor"></a><b>§18.2. </b>We perform this first with <span class="extract"><span class="extract-syntax">parity</span></span> being <span class="extract"><span class="extract-syntax">TRUE</span></span>, then <span class="extract"><span class="extract-syntax">FALSE</span></span>.
|
||||
|
@ -547,7 +576,7 @@ reads them in for every kit which is included in the project.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">#</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::activate_elements</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">Projects::activate_elements</span></span>:<br/><a href="5-ps2.html#SP29_4">§29.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">project</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::activate_elements</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Projects::activate_elements</span></span>:<br/><a href="5-ps2.html#SP29_4">§29.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">project</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::activate_bare_minimum</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">kit_dependency</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kd</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">kd</span><span class="plain-syntax">, </span><span class="reserved-syntax">kit_dependency</span><span class="plain-syntax">, </span><span class="identifier-syntax">project</span><span class="plain-syntax">-></span><span class="element-syntax">kits_to_include</span><span class="plain-syntax">)</span>
|
||||
|
@ -594,7 +623,7 @@ may be multiple sentences, which we need to count up.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::early_source_text</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">Projects::early_source_text</span></span>:<br/><a href="5-ps2.html#SP29_1">§29.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">project</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::early_source_text</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">Projects::early_source_text</span></span>:<br/><a href="5-ps2.html#SP29_1">§29.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">project</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">kit_dependency</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kd</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">kd</span><span class="plain-syntax">, </span><span class="reserved-syntax">kit_dependency</span><span class="plain-syntax">, </span><span class="identifier-syntax">project</span><span class="plain-syntax">-></span><span class="element-syntax">kits_to_include</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ks.html#SP12" class="function-link"><span class="function-syntax">Kits::early_source_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">kd</span><span class="plain-syntax">-></span><span class="element-syntax">kit</span><span class="plain-syntax">);</span>
|
||||
|
@ -608,7 +637,7 @@ details instead.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">#</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">PIPELINE_MODULE</span>
|
||||
<span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="function-syntax">Projects::list_of_attachment_instructions</span><button class="popup" onclick="togglePopup('usagePopup19')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup19">Usage of <span class="code-font"><span class="function-syntax">Projects::list_of_attachment_instructions</span></span>:<br/>Inter Skill - <a href="3-is.html#SP4">§4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">project</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="function-syntax">Projects::list_of_attachment_instructions</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">Projects::list_of_attachment_instructions</span></span>:<br/>Inter Skill - <a href="3-is.html#SP4">§4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">project</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">requirements_list</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">attachment_instruction</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">kit_dependency</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kd</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">kd</span><span class="plain-syntax">, </span><span class="reserved-syntax">kit_dependency</span><span class="plain-syntax">, </span><span class="identifier-syntax">project</span><span class="plain-syntax">-></span><span class="element-syntax">kits_to_include</span><span class="plain-syntax">) {</span>
|
||||
|
@ -624,11 +653,11 @@ details instead.
|
|||
<p class="commentary firstcommentary"><a id="SP25" class="paragraph-anchor"></a><b>§25. File to write to. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::set_primary_output</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">Projects::set_primary_output</span></span>:<br/>Inbuild Control - <a href="1-ic.html#SP19">§19</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::set_primary_output</span><button class="popup" onclick="togglePopup('usagePopup19')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup19">Usage of <span class="code-font"><span class="function-syntax">Projects::set_primary_output</span></span>:<br/>Inbuild Control - <a href="1-ic.html#SP19">§19</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="identifier-syntax">primary_output</span><span class="plain-syntax"> = </span><span class="identifier-syntax">F</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">Projects::get_primary_output</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">Projects::get_primary_output</span></span>:<br/><a href="5-ps2.html#SP26_1">§26.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">Projects::get_primary_output</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">Projects::get_primary_output</span></span>:<br/><a href="5-ps2.html#SP26_1">§26.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">primary_output</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">primary_output</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">stand_alone</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::set_extension</span><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">primary_source</span><span class="plain-syntax">,</span>
|
||||
|
@ -645,7 +674,7 @@ rather like a family tree for a minor European royal family.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::construct_graph</span><button class="popup" onclick="togglePopup('usagePopup22')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup22">Usage of <span class="code-font"><span class="function-syntax">Projects::construct_graph</span></span>:<br/>Project Bundle Manager - <a href="4-pbm.html#SP6">§6</a><br/>Project File Manager - <a href="4-pfm.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::construct_graph</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">Projects::construct_graph</span></span>:<br/>Project Bundle Manager - <a href="4-pbm.html#SP6">§6</a><br/>Project File Manager - <a href="4-pfm.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">proj</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">chosen_build_target</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ps2.html#SP18" class="function-link"><span class="function-syntax">Projects::finalise_kit_dependencies</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">);</span>
|
||||
|
@ -814,7 +843,7 @@ want the dependencies <span class="extract"><span class="extract-syntax">A ->
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::graph_dependent_kit</span><button class="popup" onclick="togglePopup('usagePopup23')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup23">Usage of <span class="code-font"><span class="function-syntax">Projects::graph_dependent_kit</span></span>:<br/><a href="5-ps2.html#SP26_2_2">§26.2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">,</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::graph_dependent_kit</span><button class="popup" onclick="togglePopup('usagePopup22')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup22">Usage of <span class="code-font"><span class="function-syntax">Projects::graph_dependent_kit</span></span>:<br/><a href="5-ps2.html#SP26_2_2">§26.2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="reserved-syntax">kit_dependency</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kd</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">use</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">KV</span><span class="plain-syntax"> = </span><span class="identifier-syntax">kd</span><span class="plain-syntax">-></span><span class="element-syntax">kit</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">-></span><span class="element-syntax">vertex</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">use</span><span class="plain-syntax">) </span><a href="3-bg.html#SP4" class="function-link"><span class="function-syntax">Graphs::need_this_to_use</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="identifier-syntax">KV</span><span class="plain-syntax">);</span>
|
||||
|
@ -828,7 +857,7 @@ want the dependencies <span class="extract"><span class="extract-syntax">A ->
|
|||
<span class="plain-syntax"> </span><a href="5-ps2.html#SP27" class="function-link"><span class="function-syntax">Projects::graph_dependent_kit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="identifier-syntax">KV</span><span class="plain-syntax">, </span><span class="identifier-syntax">kd2</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::graph_dependent_language</span><button class="popup" onclick="togglePopup('usagePopup24')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup24">Usage of <span class="code-font"><span class="function-syntax">Projects::graph_dependent_language</span></span>:<br/><a href="5-ps2.html#SP26_2_3">§26.2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">,</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::graph_dependent_language</span><button class="popup" onclick="togglePopup('usagePopup23')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup23">Usage of <span class="code-font"><span class="function-syntax">Projects::graph_dependent_language</span></span>:<br/><a href="5-ps2.html#SP26_2_3">§26.2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">use</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">LV</span><span class="plain-syntax"> = </span><span class="identifier-syntax">L</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">-></span><span class="element-syntax">vertex</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">use</span><span class="plain-syntax">) </span><a href="3-bg.html#SP4" class="function-link"><span class="function-syntax">Graphs::need_this_to_use</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="identifier-syntax">LV</span><span class="plain-syntax">);</span>
|
||||
|
@ -847,7 +876,7 @@ each extension against the intersection of all requirements put on it:
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::check_extension_versions</span><button class="popup" onclick="togglePopup('usagePopup25')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup25">Usage of <span class="code-font"><span class="function-syntax">Projects::check_extension_versions</span></span>:<br/><a href="5-ps2.html#SP26">§26</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::check_extension_versions</span><button class="popup" onclick="togglePopup('usagePopup24')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup24">Usage of <span class="code-font"><span class="function-syntax">Projects::check_extension_versions</span></span>:<br/><a href="5-ps2.html#SP26">§26</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ps2.html#SP28" class="function-link"><span class="function-syntax">Projects::check_extension_versions_d</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">-></span><span class="element-syntax">vertex</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
|
@ -897,8 +926,18 @@ for the extensions they refer to, in a post-processing phase.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::read_source_text_for</span><button class="popup" onclick="togglePopup('usagePopup26')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup26">Usage of <span class="code-font"><span class="function-syntax">Projects::read_source_text_for</span></span>:<br/>Project Bundle Manager - <a href="4-pbm.html#SP7">§7</a><br/>Project File Manager - <a href="4-pfm.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ls.html#SP8" class="function-link"><span class="function-syntax">Languages::read_Preform_definition</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">language_of_syntax</span><span class="plain-syntax">, </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">search_list</span><span class="plain-syntax">);</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::read_source_text_for</span><button class="popup" onclick="togglePopup('usagePopup25')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup25">Usage of <span class="code-font"><span class="function-syntax">Projects::read_source_text_for</span></span>:<br/>Project Bundle Manager - <a href="4-pbm.html#SP7">§7</a><br/>Project File Manager - <a href="4-pfm.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="5-ls.html#SP9" class="function-link"><span class="function-syntax">Languages::find_for</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"English"</span><span class="plain-syntax">, </span><a href="5-ps2.html#SP6" class="function-link"><span class="function-syntax">Projects::nest_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">E</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ls.html#SP7" class="function-link"><span class="function-syntax">Languages::read_Preform_definition</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">search_list</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">language_of_syntax</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">language_of_syntax</span><span class="plain-syntax"> != </span><span class="identifier-syntax">E</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-ls.html#SP7" class="function-link"><span class="function-syntax">Languages::read_Preform_definition</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">language_of_syntax</span><span class="plain-syntax">, </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">search_list</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax"> = </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_T</span></a><span class="plain-syntax">(</span><span class="constant-syntax">SYNTAX_CE</span><span class="plain-syntax">, </span><span class="constant-syntax">UnavailableLOS_SYNERROR</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">language_of_syntax</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">-></span><span class="element-syntax">edition</span><span class="plain-syntax">-></span><span class="element-syntax">work</span><span class="plain-syntax">-></span><span class="element-syntax">title</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Sentences::set_start_of_source</span><span class="plain-syntax">(</span><span class="identifier-syntax">sfsm</span><span class="plain-syntax">, -1);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inclusions_heading</span><span class="plain-syntax">, *</span><span class="identifier-syntax">implicit_heading</span><span class="plain-syntax">;</span>
|
||||
|
@ -1015,6 +1054,187 @@ place of... instructions after the sweep for inclusions.
|
|||
<span class="plain-syntax"> </span><a href="6-hdn.html#SP21" class="function-link"><span class="function-syntax">Headings::satisfy_dependencies</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">, </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">syntax_tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ps2.html#SP29">§29</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP30" class="paragraph-anchor"></a><b>§30. The bibliographic sentence. </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: in other words, to wait until the syntax tree for a
|
||||
project has been read in.
|
||||
</p>
|
||||
|
||||
<p class="commentary">But this isn't fast enough, because the sentence also specifies the language
|
||||
of syntax, and we need to know of any non-English choice immediately. We
|
||||
don't even want to use Preform to parse the sentence, either, because we might
|
||||
want to load a different Preform file depending on that non-English choice.
|
||||
</p>
|
||||
|
||||
<p class="commentary">So the following rapid scan catches just the first sentence of the first
|
||||
source file of the project.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">BadTitleSentence_SYNERROR</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Projects::scan_bibliographic_data</span><button class="popup" onclick="togglePopup('usagePopup26')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup26">Usage of <span class="code-font"><span class="function-syntax">Projects::scan_bibliographic_data</span></span>:<br/><a href="5-ps2.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inform_project</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proj</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><a href="5-ps2.html#SP8" class="function-link"><span class="function-syntax">Projects::source</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="reserved-syntax">build_vertex</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">N</span><span class="plain-syntax">-></span><span class="element-syntax">as_file</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">FILE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">SF</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::fopen_caseless</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="string-syntax">"r"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">SF</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">break</span><span class="plain-syntax">; </span><span class="comment-syntax"> no source means no bibliographic data</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ps2.html#SP30_1" class="named-paragraph-link"><span class="named-paragraph">Read the opening sentence</span><span class="named-paragraph-number">30.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">fclose</span><span class="plain-syntax">(</span><span class="identifier-syntax">SF</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">; </span><span class="comment-syntax"> so that we look only at the first source file</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP30_1" class="paragraph-anchor"></a><b>§30.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Read the opening sentence</span><span class="named-paragraph-number">30.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">bibliographic_sentence</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">bracketed</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ps2.html#SP30_1_1" class="named-paragraph-link"><span class="named-paragraph">Capture the opening sentence and its bracketed part</span><span class="named-paragraph-number">30.1.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">bibliographic_sentence</span><span class="plain-syntax">) > </span><span class="constant-syntax">0</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_first_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">bibliographic_sentence</span><span class="plain-syntax">) == </span><span class="character-syntax">'"'</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ps2.html#SP30_1_2" class="named-paragraph-link"><span class="named-paragraph">The opening sentence is bibliographic, so scan it</span><span class="named-paragraph-number">30.1.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">bibliographic_sentence</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">bracketed</span><span class="plain-syntax">)</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ps2.html#SP30">§30</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP30_1_1" class="paragraph-anchor"></a><b>§30.1.1. </b>A bibliographic sentence can optionally give a language, by use of "(in ...)":
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
<p>"Bonjour Albertine" by Marcel Proust (in French)</p>
|
||||
</blockquote>
|
||||
|
||||
<p class="commentary">If so, the following writes <span class="extract"><span class="extract-syntax">"Bonjour Albertine" by Marcel Proust</span></span> to the
|
||||
text <span class="extract"><span class="extract-syntax">bibliographic_sentence</span></span> and <span class="extract"><span class="extract-syntax">in French</span></span> to the text <span class="extract"><span class="extract-syntax">bracketed</span></span>. If not,
|
||||
the whole thing goes into <span class="extract"><span class="extract-syntax">bibliographic_sentence</span></span> and <span class="extract"><span class="extract-syntax">bracketed</span></span> is empty.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Capture the opening sentence and its bracketed part</span><span class="named-paragraph-number">30.1.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">, </span><span class="identifier-syntax">commented</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">quoted</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">rounded</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">content_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TextFiles::utf8_fgetc</span><span class="plain-syntax">(</span><span class="identifier-syntax">SF</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) != </span><span class="identifier-syntax">EOF</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="constant-syntax">0xFEFF</span><span class="plain-syntax">) </span><span class="reserved-syntax">continue</span><span class="plain-syntax">; </span><span class="comment-syntax"> skip the optional Unicode BOM pseudo-character</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">commented</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">']'</span><span class="plain-syntax">) </span><span class="identifier-syntax">commented</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">quoted</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rounded</span><span class="plain-syntax">) </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">bracketed</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">bibliographic_sentence</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'"'</span><span class="plain-syntax">) </span><span class="identifier-syntax">quoted</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'['</span><span class="plain-syntax">) </span><span class="identifier-syntax">commented</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Characters::is_whitespace</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">content_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rounded</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'"'</span><span class="plain-syntax">) </span><span class="identifier-syntax">quoted</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\x0a'</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\x0d'</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\n'</span><span class="plain-syntax">)) </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="character-syntax">' '</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">')'</span><span class="plain-syntax">) </span><span class="identifier-syntax">rounded</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">bracketed</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'('</span><span class="plain-syntax">) </span><span class="identifier-syntax">rounded</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\x0a'</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\x0d'</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\n'</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">content_found</span><span class="plain-syntax">) </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="character-syntax">' '</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">bibliographic_sentence</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">bibliographic_sentence</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'"'</span><span class="plain-syntax">) </span><span class="identifier-syntax">quoted</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::trim_white_space</span><span class="plain-syntax">(</span><span class="identifier-syntax">bibliographic_sentence</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::trim_white_space</span><span class="plain-syntax">(</span><span class="identifier-syntax">bracketed</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_last_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">bibliographic_sentence</span><span class="plain-syntax">) == </span><span class="character-syntax">'.'</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_last_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">bibliographic_sentence</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ps2.html#SP30_1">§30.1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP30_1_2" class="paragraph-anchor"></a><b>§30.1.2. </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="commentary">But not always:
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
<p>"Greek Rural Postmen and Their Cancellation Numbers" by "will.i.am"</p>
|
||||
</blockquote>
|
||||
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">The opening sentence is bibliographic, so scan it</span><span class="named-paragraph-number">30.1.2</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Regexp::create_mr</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">bibliographic_sentence</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"\"([^\"]+)\" by \"([^\"]+)\""</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">title</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">author</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1];</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ps2.html#SP30_1_2_2" class="named-paragraph-link"><span class="named-paragraph">Set title and author</span><span class="named-paragraph-number">30.1.2.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">bibliographic_sentence</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"\"([^\"]+)\" by ([^\"]+)"</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">title</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">author</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1];</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ps2.html#SP30_1_2_2" class="named-paragraph-link"><span class="named-paragraph">Set title and author</span><span class="named-paragraph-number">30.1.2.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">bibliographic_sentence</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"\"([^\"]+)\""</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">title</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">author</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ps2.html#SP30_1_2_2" class="named-paragraph-link"><span class="named-paragraph">Set title and author</span><span class="named-paragraph-number">30.1.2.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ps2.html#SP30_1_2_3" class="named-paragraph-link"><span class="named-paragraph">Flag bad bibliographic sentence</span><span class="named-paragraph-number">30.1.2.3</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Regexp::dispose_of</span><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">bracketed</span><span class="plain-syntax">) > </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Regexp::create_mr</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">bracketed</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"in (%c+)"</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="5-ps2.html#SP30_1_2_1" class="named-paragraph-link"><span class="named-paragraph">Set language of play</span><span class="named-paragraph-number">30.1.2.1</span></a></span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">clue_for_language_of_syntax</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">bracketed</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Regexp::dispose_of</span><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ps2.html#SP30_1">§30.1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP30_1_2_1" class="paragraph-anchor"></a><b>§30.1.2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Set language of play</span><span class="named-paragraph-number">30.1.2.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">language_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_of_language_of_play</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">language_name</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ps2.html#SP30_1_2">§30.1.2</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP30_1_2_2" class="paragraph-anchor"></a><b>§30.1.2.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Set title and author</span><span class="named-paragraph-number">30.1.2.2</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">title</span><span class="plain-syntax">) > </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax"> = </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">-></span><span class="element-syntax">edition</span><span class="plain-syntax">-></span><span class="element-syntax">work</span><span class="plain-syntax">-></span><span class="element-syntax">title</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">title</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">author</span><span class="plain-syntax">) > </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">-></span><span class="element-syntax">edition</span><span class="plain-syntax">-></span><span class="element-syntax">work</span><span class="plain-syntax">-></span><span class="element-syntax">author_name</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">-></span><span class="element-syntax">edition</span><span class="plain-syntax">-></span><span class="element-syntax">work</span><span class="plain-syntax">-></span><span class="element-syntax">author_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">A</span><span class="plain-syntax"> = </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">-></span><span class="element-syntax">edition</span><span class="plain-syntax">-></span><span class="element-syntax">work</span><span class="plain-syntax">-></span><span class="element-syntax">author_name</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">author</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ps2.html#SP30_1_2">§30.1.2</a> (three times).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP30_1_2_3" class="paragraph-anchor"></a><b>§30.1.2.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Flag bad bibliographic sentence</span><span class="named-paragraph-number">30.1.2.3</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax"> = </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new</span></a><span class="plain-syntax">(</span><span class="constant-syntax">SYNTAX_CE</span><span class="plain-syntax">, </span><span class="constant-syntax">BadTitleSentence_SYNERROR</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ps2.html#SP30_1_2">§30.1.2</a>.</li></ul>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-ps.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-es.html">es</a></li><li class="progresssection"><a href="5-ks.html">ks</a></li><li class="progresssection"><a href="5-ls.html">ls</a></li><li class="progresssection"><a href="5-ps.html">ps</a></li><li class="progresscurrent">ps2</li><li class="progresssection"><a href="5-ts.html">ts</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresschapter"><a href="7-tm.html">7</a></li><li class="progressnext"><a href="5-ts.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
|
|
@ -72,7 +72,7 @@ stored in the following structure.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">inform_template</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure inform_template is accessed in 1/sm, 2/edt, 2/rqr, 2/nst, 2/jm, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 5/es, 5/ks, 5/ls, 5/ps, 5/ps2, 6/st, 6/hdn, 6/tbs, 6/inc, 6/vmg, 7/dct, 7/ip, 7/ip2 and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure inform_template is accessed in 1/sm, 2/edt, 2/rqr, 2/nst, 2/jm, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 5/es, 5/ks, 5/ls, 5/ps, 5/ps2, 6/st, 6/hdn, 6/inc, 6/vmg, 7/dct, 7/ip, 7/ip2 and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>This is called as soon as a new copy <span class="extract"><span class="extract-syntax">C</span></span> of the language genre is created.
|
||||
</p>
|
||||
|
||||
|
|
|
@ -286,7 +286,7 @@ overlapping with this, and they need to match.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="6-inc.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresscurrentchapter">6</li><li class="progresssection"><a href="6-st.html">st</a></li><li class="progresssection"><a href="6-hdn.html">hdn</a></li><li class="progresssection"><a href="6-tbs.html">tbs</a></li><li class="progresssection"><a href="6-tof.html">tof</a></li><li class="progresssection"><a href="6-inc.html">inc</a></li><li class="progresscurrent">cs</li><li class="progresssection"><a href="6-vmg.html">vmg</a></li><li class="progresschapter"><a href="7-tm.html">7</a></li><li class="progressnext"><a href="6-vmg.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="6-inc.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresscurrentchapter">6</li><li class="progresssection"><a href="6-st.html">st</a></li><li class="progresssection"><a href="6-hdn.html">hdn</a></li><li class="progresssection"><a href="6-tof.html">tof</a></li><li class="progresssection"><a href="6-inc.html">inc</a></li><li class="progresscurrent">cs</li><li class="progresssection"><a href="6-vmg.html">vmg</a></li><li class="progresschapter"><a href="7-tm.html">7</a></li><li class="progressnext"><a href="6-vmg.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -972,7 +972,7 @@ are optional all the same.
|
|||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="6-hdn.html#SP24">§24</a>.</li></ul>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="6-st.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresscurrentchapter">6</li><li class="progresssection"><a href="6-st.html">st</a></li><li class="progresscurrent">hdn</li><li class="progresssection"><a href="6-tbs.html">tbs</a></li><li class="progresssection"><a href="6-tof.html">tof</a></li><li class="progresssection"><a href="6-inc.html">inc</a></li><li class="progresssection"><a href="6-cs.html">cs</a></li><li class="progresssection"><a href="6-vmg.html">vmg</a></li><li class="progresschapter"><a href="7-tm.html">7</a></li><li class="progressnext"><a href="6-tbs.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="6-st.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresscurrentchapter">6</li><li class="progresssection"><a href="6-st.html">st</a></li><li class="progresscurrent">hdn</li><li class="progresssection"><a href="6-tof.html">tof</a></li><li class="progresssection"><a href="6-inc.html">inc</a></li><li class="progresssection"><a href="6-cs.html">cs</a></li><li class="progresssection"><a href="6-vmg.html">vmg</a></li><li class="progresschapter"><a href="7-tm.html">7</a></li><li class="progressnext"><a href="6-tof.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -441,7 +441,7 @@ the "begins here".
|
|||
</pre>
|
||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="6-tof.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresscurrentchapter">6</li><li class="progresssection"><a href="6-st.html">st</a></li><li class="progresssection"><a href="6-hdn.html">hdn</a></li><li class="progresssection"><a href="6-tbs.html">tbs</a></li><li class="progresssection"><a href="6-tof.html">tof</a></li><li class="progresscurrent">inc</li><li class="progresssection"><a href="6-cs.html">cs</a></li><li class="progresssection"><a href="6-vmg.html">vmg</a></li><li class="progresschapter"><a href="7-tm.html">7</a></li><li class="progressnext"><a href="6-cs.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="6-tof.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresscurrentchapter">6</li><li class="progresssection"><a href="6-st.html">st</a></li><li class="progresssection"><a href="6-hdn.html">hdn</a></li><li class="progresssection"><a href="6-tof.html">tof</a></li><li class="progresscurrent">inc</li><li class="progresssection"><a href="6-cs.html">cs</a></li><li class="progresssection"><a href="6-vmg.html">vmg</a></li><li class="progresschapter"><a href="7-tm.html">7</a></li><li class="progressnext"><a href="6-cs.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -220,6 +220,7 @@ add to those generated in <a href="../syntax-module/index.html" class="internal"
|
|||
<span class="definition-keyword">enum</span> <span class="constant-syntax">ExtVersionMalformed_SYNERROR</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">ExtInadequateVM_SYNERROR</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">ExtMisidentifiedEnds_SYNERROR</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">UnavailableLOS_SYNERROR</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. </b>The next tweak to <a href="../syntax-module/index.html" class="internal">syntax</a> is to give it some node metadata. <a href="../syntax-module/index.html" class="internal">syntax</a>
|
||||
itself places nodes of a small number of basic types into the syntax tree;
|
||||
|
@ -415,7 +416,7 @@ stack into the new world of kits), so we issue a syntax error.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-ts.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresscurrentchapter">6</li><li class="progresscurrent">st</li><li class="progresssection"><a href="6-hdn.html">hdn</a></li><li class="progresssection"><a href="6-tbs.html">tbs</a></li><li class="progresssection"><a href="6-tof.html">tof</a></li><li class="progresssection"><a href="6-inc.html">inc</a></li><li class="progresssection"><a href="6-cs.html">cs</a></li><li class="progresssection"><a href="6-vmg.html">vmg</a></li><li class="progresschapter"><a href="7-tm.html">7</a></li><li class="progressnext"><a href="6-hdn.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-ts.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresscurrentchapter">6</li><li class="progresscurrent">st</li><li class="progresssection"><a href="6-hdn.html">hdn</a></li><li class="progresssection"><a href="6-tof.html">tof</a></li><li class="progresssection"><a href="6-inc.html">inc</a></li><li class="progresssection"><a href="6-cs.html">cs</a></li><li class="progresssection"><a href="6-vmg.html">vmg</a></li><li class="progresschapter"><a href="7-tm.html">7</a></li><li class="progressnext"><a href="6-hdn.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -137,7 +137,7 @@ unyielding the user's views, it's not allowed to write:
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="6-tbs.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresscurrentchapter">6</li><li class="progresssection"><a href="6-st.html">st</a></li><li class="progresssection"><a href="6-hdn.html">hdn</a></li><li class="progresssection"><a href="6-tbs.html">tbs</a></li><li class="progresscurrent">tof</li><li class="progresssection"><a href="6-inc.html">inc</a></li><li class="progresssection"><a href="6-cs.html">cs</a></li><li class="progresssection"><a href="6-vmg.html">vmg</a></li><li class="progresschapter"><a href="7-tm.html">7</a></li><li class="progressnext"><a href="6-inc.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="6-hdn.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresscurrentchapter">6</li><li class="progresssection"><a href="6-st.html">st</a></li><li class="progresssection"><a href="6-hdn.html">hdn</a></li><li class="progresscurrent">tof</li><li class="progresssection"><a href="6-inc.html">inc</a></li><li class="progresssection"><a href="6-cs.html">cs</a></li><li class="progresssection"><a href="6-vmg.html">vmg</a></li><li class="progresschapter"><a href="7-tm.html">7</a></li><li class="progressnext"><a href="6-inc.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -95,7 +95,7 @@ to give it permanency.
|
|||
</pre>
|
||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="6-cs.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresscurrentchapter">6</li><li class="progresssection"><a href="6-st.html">st</a></li><li class="progresssection"><a href="6-hdn.html">hdn</a></li><li class="progresssection"><a href="6-tbs.html">tbs</a></li><li class="progresssection"><a href="6-tof.html">tof</a></li><li class="progresssection"><a href="6-inc.html">inc</a></li><li class="progresssection"><a href="6-cs.html">cs</a></li><li class="progresscurrent">vmg</li><li class="progresschapter"><a href="7-tm.html">7</a></li><li class="progressnext"><a href="7-tm.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="6-cs.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresscurrentchapter">6</li><li class="progresssection"><a href="6-st.html">st</a></li><li class="progresssection"><a href="6-hdn.html">hdn</a></li><li class="progresssection"><a href="6-tof.html">tof</a></li><li class="progresssection"><a href="6-inc.html">inc</a></li><li class="progresssection"><a href="6-cs.html">cs</a></li><li class="progresscurrent">vmg</li><li class="progresschapter"><a href="7-tm.html">7</a></li><li class="progressnext"><a href="7-tm.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -264,11 +264,6 @@
|
|||
<spon class="sectiontitle">Headings</span></a> -
|
||||
<span class="sectionpurpose">To keep track of the hierarchy of headings and subheadings found in the source text.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="6-tbs.html">
|
||||
<spon class="sectiontitle">The Bibliographic Sentence</span></a> -
|
||||
<span class="sectionpurpose">That line at the top of an Inform source text, saying what it is and who wrote it.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="6-tof.html">
|
||||
<spon class="sectiontitle">The Options File</span></a> -
|
||||
|
|
|
@ -685,10 +685,6 @@ sentences and options-file sentences may have been read already.)
|
|||
<span class="plain-syntax"> </span><a href="2-pn.html#SP6" class="function-link"><span class="function-syntax">Node::set_type</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">new</span><span class="plain-syntax">, </span><span class="identifier-syntax">sfsm</span><span class="plain-syntax">-></span><span class="element-syntax">nt</span><span class="plain-syntax">); </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pn.html#SP6" class="function-link"><span class="function-syntax">Node::set_type</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">new</span><span class="plain-syntax">, </span><span class="identifier-syntax">sfsm</span><span class="plain-syntax">-></span><span class="element-syntax">nt</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">SUPERVISOR_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sfsm</span><span class="plain-syntax">-></span><span class="element-syntax">nt</span><span class="plain-syntax"> == </span><span class="identifier-syntax">BIBLIOGRAPHIC_NT</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">BiblioSentence::notify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sfsm</span><span class="plain-syntax">-></span><span class="element-syntax">project_ref</span><span class="plain-syntax">, </span><span class="identifier-syntax">new</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
|
|
@ -236,7 +236,7 @@ wordings.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Wordings::empty</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Wordings::empty</span></span>:<br/><a href="3-wrd.html#SP6">§6</a>, <a href="3-wrd.html#SP7">§7</a>, <a href="3-wrd.html#SP8">§8</a>, <a href="3-wrd.html#SP9">§9</a>, <a href="3-wrd.html#SP20">§20</a>, <a href="3-wrd.html#SP21_3">§21.3</a><br/>Vocabulary - <a href="2-vcb.html#SP16">§16</a><br/>Word Assemblages - <a href="2-wa.html#SP3">§3</a>, <a href="2-wa.html#SP9">§9</a><br/>Preform - <a href="4-prf.html#SP1_3">§1.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Wordings::empty</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Wordings::empty</span></span>:<br/><a href="3-wrd.html#SP6">§6</a>, <a href="3-wrd.html#SP7">§7</a>, <a href="3-wrd.html#SP8">§8</a>, <a href="3-wrd.html#SP9">§9</a>, <a href="3-wrd.html#SP20">§20</a>, <a href="3-wrd.html#SP21_3">§21.3</a><br/>Vocabulary - <a href="2-vcb.html#SP16">§16</a><br/>Word Assemblages - <a href="2-wa.html#SP3">§3</a>, <a href="2-wa.html#SP9">§9</a><br/>Loading Preform - <a href="4-lp.html#SP1">§1</a><br/>Preform - <a href="4-prf.html#SP1_3">§1.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">word_A</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">word_B</span><span class="plain-syntax"> >= </span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="element-syntax">word_A</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
|
|
@ -73,7 +73,9 @@ function togglePopup(material_id) {
|
|||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">LoadPreform::load</span><span class="plain-syntax">(</span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="constant-syntax">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">primary_Preform_language</span><span class="plain-syntax"> = </span><span class="identifier-syntax">L</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-lp.html#SP7" class="function-link"><span class="function-syntax">LoadPreform::parse</span></a><span class="plain-syntax">(</span><a href="4-lp.html#SP2" class="function-link"><span class="function-syntax">LoadPreform::feed_from_Preform_file</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">), </span><span class="identifier-syntax">L</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><a href="4-lp.html#SP2" class="function-link"><span class="function-syntax">LoadPreform::feed_from_Preform_file</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-wrd.html#SP11" class="function-link"><span class="function-syntax">Wordings::empty</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-lp.html#SP7" class="function-link"><span class="function-syntax">LoadPreform::parse</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>We simply feed the lines one at a time. Preform is parsed with the same
|
||||
|
@ -88,7 +90,7 @@ as word-breaking punctuation marks:
|
|||
<span class="plain-syntax"> </span><span class="constant-syntax">feed_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><a href="3-fds.html#SP2" class="function-link"><span class="function-syntax">Feeds::begin</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TextFiles::read</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><a href="4-lp.html#SP2" class="function-link"><span class="function-syntax">LoadPreform::load_helper</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"Unable to open Preform definition"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-fds.html#SP2" class="function-link"><span class="function-syntax">Feeds::end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
|
|
|
@ -181,10 +181,10 @@ which we are installed) already. Once the following is run, Preform is ready
|
|||
for use.
|
||||
|
||||
=
|
||||
void Main::load_preform(inform_language *L) {
|
||||
int Main::load_preform(inform_language *L) {
|
||||
pathname *P = Pathnames::down(path_to_inbuild, I"Tangled");
|
||||
filename *S = Filenames::in(P, I"Syntax.preform");
|
||||
LoadPreform::load(S, NULL);
|
||||
return LoadPreform::load(S, NULL);
|
||||
}
|
||||
|
||||
@h Target list.
|
||||
|
|
|
@ -16,6 +16,7 @@ Import: supervisor
|
|||
Manual
|
||||
Using Inbuild
|
||||
A Guide to Kits
|
||||
A Guide to Language Bundles
|
||||
Reference Card
|
||||
|
||||
Chapter 1: Outside of inform7
|
||||
|
|
171
inbuild/Manual/A Guide to Language Bundles.w
Normal file
171
inbuild/Manual/A Guide to Language Bundles.w
Normal file
|
@ -0,0 +1,171 @@
|
|||
A Guide to Language Bundles.
|
||||
|
||||
Provisional documentation on language bundles.
|
||||
|
||||
@h About languages.
|
||||
Like a "kit" or an "extension", a "language bundle" is a resource which Inbuild
|
||||
can use. Language here means the human kind: English, French, Spanish and so on.
|
||||
|
||||
For each Inform project it looks at, Inbuild must determine:
|
||||
|
||||
(*) The "language of play" (LOP), which is the language printed by the story and
|
||||
recognised in commands by the player.
|
||||
|
||||
(*) The "language of syntax" (LOS), which is the language the source text for the
|
||||
story is written in.
|
||||
|
||||
Both are by default English. If the LOS is anything other than English, then the LOP
|
||||
must be the same as the LOS. But English syntax has often been used to write
|
||||
Inform stories with LOP other than English, and indeed this is the usual way to
|
||||
write non-English stories. (It is an arduous process to make Inform work
|
||||
with an LOS other than English, and the tool chain needs improvement in this
|
||||
area. But Inbuild understands the necessary concepts, at least.)
|
||||
|
||||
The LOP is recorded on the Library Card index entry for an Inform project,
|
||||
and is also included in the iFiction record of a released story.
|
||||
|
||||
@ Inbuild recognises the language of play by looking at the opening, or
|
||||
"bibliographic", sentence of an Inform project. For many projects this
|
||||
consists of a title and perhaps an author, like so:
|
||||
|
||||
>> "Why Didn't They Ask Evans?" by Agatha Christie
|
||||
|
||||
But it can optionally add a bracketed note giving the language:
|
||||
|
||||
>> "Le Port des brumes" by Georges Simenon (in French)
|
||||
|
||||
This bracketed note can take two forms. If it begins "in", then the rest must
|
||||
be the English form of the name of a language -- in this instance, "French".
|
||||
This must be a language for which Inbuild can find a language bundle (see below).
|
||||
The LOP will be French, and the LOS will be English.
|
||||
|
||||
If the note does not begin "in", then it must be text recognised by a language
|
||||
bundle visible to Inbuild (see below). For example:
|
||||
|
||||
>> "Le Port des brumes" by Georges Simenon (en français)
|
||||
|
||||
This time the LOP and LOS are both French. Inbuild was able to determine that
|
||||
because the French language bundle picked up on the phrase "en français", which
|
||||
Inbuild itself does not recognise.
|
||||
|
||||
@h Language bundles.
|
||||
Inform can only compile a project whose LOP is other than English if it is
|
||||
given extra resources to do so: the default installation covers only English.
|
||||
In a typical situation, three resources are needed:
|
||||
|
||||
(*) A language bundle, such as "French".
|
||||
(*) A kit of Inter code, such as "FrenchLanguageKit".
|
||||
(*) An extension of Inform 7 source text, such as "French Language by Paul Mensonge".
|
||||
|
||||
Note: In fact at present the Inform installation does ship with language bundles
|
||||
for English, French, German, Italian, Spanish and Swedish, but those other than
|
||||
English are likely to be dropped from the core installation in a future release,
|
||||
and we recommend that groups of translators begin to keep their own copies,
|
||||
distributing those alongside the necessary kit and extension.
|
||||
|
||||
@ Language bundles should be stored in a subdirectory called "Languages",
|
||||
either of an individual project's Materials directory (in which case they will
|
||||
be visible just to that project) or in a so-called "nest" of resources. Language
|
||||
bundles shipped in the core Inform distribution are at |inform7/Internal/Languages|.
|
||||
|
||||
Each language bundle is itself a directory, whose name must be the English name
|
||||
of the language (for example, |French|). In v9 (and early betas of v10) of Inform,
|
||||
this directory then contained a file of metadata called |about.txt|. This file
|
||||
is now forbidden to exist, and instead there must be a file called |language_metadata.json|.
|
||||
This is a JSON file very similar to the ones used for kit metadata: see //A Guide to Kits//,
|
||||
which it is probably helpful to read before going much further with this.
|
||||
|
||||
For example:
|
||||
= (text)
|
||||
{
|
||||
"is": {
|
||||
"type": "language",
|
||||
"title": "French"
|
||||
},
|
||||
"needs": [ {
|
||||
"need": {
|
||||
"type": "kit",
|
||||
"title": "FrenchLanguageKit"
|
||||
}
|
||||
} ],
|
||||
"language-details": {
|
||||
"translated-name": "Français",
|
||||
"iso-639-1-code": "fr",
|
||||
"translated-syntax-cue": "en français"
|
||||
}
|
||||
}
|
||||
=
|
||||
Note that at present language bundles have no authorship, so that the |"is"|
|
||||
object does not give an |"author"| field. (This may change in later builds.)
|
||||
Language bundles can have version numbers, like so:
|
||||
= (text)
|
||||
"is": {
|
||||
"type": "language",
|
||||
"title": "French",
|
||||
"version": "2.3.17"
|
||||
},
|
||||
=
|
||||
But the English language kit shipped with Inform is not version-numbered.
|
||||
|
||||
@ A language bundle can only have unconditional "needs", each of which must
|
||||
be a kit, and there always has to be at least one kit. If at all possible,
|
||||
use exactly one kit, and give it a name in the form |WhateverLanguageKit|,
|
||||
where |Whatever| is the English form of the language's name. Thus
|
||||
|SpanishLanguageKit|, not |EspanolLanguageKit|.
|
||||
|
||||
The kits listed by a language bundle are automatically included by Inbuild
|
||||
when compiling a project whose LOP is that language.
|
||||
|
||||
Note that a language bundle does not have an extension among its "needs". It
|
||||
would be incorrect to write:
|
||||
= (text)
|
||||
"needs": [ {
|
||||
"need": {
|
||||
"type": "kit",
|
||||
"title": "FrenchLanguageKit"
|
||||
}
|
||||
}, {
|
||||
"need": {
|
||||
"type": "extension",
|
||||
"title": "French Language",
|
||||
"author": "Paul Mensonge"
|
||||
}
|
||||
} ],
|
||||
=
|
||||
Although the extension is indeed necessary, it should be given in the "needs"
|
||||
of the kit |FrenchLanguageKit|, not of the language bundle "French". Thus
|
||||
= (text)
|
||||
French --- needs --> FrenchLanguageKit --- needs --> French Language by Paul Mensonge
|
||||
=
|
||||
|
||||
@ The |language-details.translated-name| field is required, and should the the
|
||||
language as it is normally written in the language itself: thus, |Deutsch| not
|
||||
|German|.
|
||||
|
||||
As its name suggests, the |language-details.iso-639-1-code| field should be
|
||||
a valid ISO 639-1 code for the language in question -- a two-letter code such
|
||||
as "de" (German) or "hr" (Croatian). See for example
|
||||
//Wikipedia -> https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes// for a complete list.
|
||||
|
||||
The field |language-details.translated-syntax-cue| is optional. If given, it's
|
||||
a "cue" to say that the LOS is this language: see above. For example, it might
|
||||
be |en français|. Note however than this cue text must not start with the word
|
||||
|in|, as that would lead to ambiguity about whether the LOP or the LOS is being
|
||||
set. So, for example, |scritto in italiano| not |in italiano|.
|
||||
|
||||
If the user tries to build a project "scritto in italiano", then Inbuild will
|
||||
read a file of Preform declarations called |Syntax.preform| inside the bundle:
|
||||
in this example, at |Italian/Syntax.preform|. Should such a file not exist (or
|
||||
not declare any nonterminals) then Inform will produce a problem like so:
|
||||
= (text)
|
||||
Problem. The project says that its syntax is written in a language other than
|
||||
English (specifically, Italian), but the language bundle for that language does
|
||||
not provide a file of Preform definitions.
|
||||
=
|
||||
|
||||
@ Finally, there is a very sketchy ability for a language bundle to localise
|
||||
the Index for a project: see e.g. |inform7/Internal/Languages/French/Index.txt|.
|
||||
Note that this takes effect only if the user asks it to with a use option:
|
||||
= (text as Inform 7)
|
||||
Use French language index.
|
||||
=
|
|
@ -291,10 +291,10 @@ When this call returns to the parent, |inbuild| is in the Targeted phase,
|
|||
which continues until the parent calls |Supervisor::go_operational| (see below).
|
||||
|
||||
=
|
||||
void (*shared_preform_callback)(inform_language *);
|
||||
int (*shared_preform_callback)(inform_language *);
|
||||
|
||||
void Supervisor::optioneering_complete(inbuild_copy *C, int compile_only,
|
||||
void (*preform_callback)(inform_language *)) {
|
||||
int (*preform_callback)(inform_language *)) {
|
||||
RUN_ONLY_IN_PHASE(CONFIGURATION_INBUILD_PHASE)
|
||||
inbuild_phase = PRETINKERING_INBUILD_PHASE;
|
||||
shared_preform_callback = preform_callback;
|
||||
|
@ -601,6 +601,6 @@ void Supervisor::pass_kit_requests(inform_project *proj) {
|
|||
if ((proj) && (kits_requested_at_command_line)) {
|
||||
text_stream *kit_name;
|
||||
LOOP_OVER_LINKED_LIST(kit_name, text_stream, kits_requested_at_command_line)
|
||||
Projects::add_kit_dependency(proj, kit_name, NULL, NULL);
|
||||
Projects::add_kit_dependency(proj, kit_name, NULL, NULL, NULL);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -216,7 +216,9 @@ void CopyErrors::write(OUTPUT_STREAM, copy_error *CE) {
|
|||
case HeadingInPlaceOfSubordinate_SYNERROR:
|
||||
WRITE("heading is in place of another heading subordinate to itself"); break;
|
||||
case HeadingInPlaceOfUnknown_SYNERROR:
|
||||
WRITE("heading is in place of another heading which doesn't exist'"); break;
|
||||
WRITE("heading is in place of another heading which doesn't exist"); break;
|
||||
case UnavailableLOS_SYNERROR:
|
||||
WRITE("this language bundle does not provide Preform syntax"); break;
|
||||
default:
|
||||
WRITE("syntax error"); break;
|
||||
}
|
||||
|
|
|
@ -28,6 +28,8 @@ void JSONMetadata::read_metadata_file(inbuild_copy *C, filename *F) {
|
|||
C->metadata_record = obj;
|
||||
@<Examine the "is" member of the metadata object@>;
|
||||
@<Police the "needs"@>;
|
||||
JSON_value *compatibility = JSON::look_up_object(obj, I"compatibility");
|
||||
if (compatibility) @<Extract compatibility@>;
|
||||
}
|
||||
|
||||
void JSONMetadata::read_metadata_file_helper(text_stream *text, text_file_position *tfp,
|
||||
|
@ -98,6 +100,13 @@ to say that |is.type| is |"kit"|.
|
|||
Copies::attach_error(C, CopyErrors::new_T(METADATA_MALFORMED_CE, -1, err));
|
||||
DISCARD_TEXT(err)
|
||||
}
|
||||
JSON_value *language_details = JSON::look_up_object(obj, I"language-details");
|
||||
if ((language_details) && (Str::ne(type_text, I"language"))) {
|
||||
TEMPORARY_TEXT(err)
|
||||
WRITE_TO(err, "the metadata contains language-details but is not for a language");
|
||||
Copies::attach_error(C, CopyErrors::new_T(METADATA_MALFORMED_CE, -1, err));
|
||||
DISCARD_TEXT(err)
|
||||
}
|
||||
|
||||
@<Make sure the title is correct@> =
|
||||
if (Str::ne(title->if_string, C->edition->work->title)) {
|
||||
|
@ -192,6 +201,16 @@ void JSONMetadata::not_both(inbuild_copy *C, JSON_value *clause, text_stream *wh
|
|||
}
|
||||
}
|
||||
|
||||
@<Extract compatibility@> =
|
||||
compatibility_specification *CS = Compatibility::from_text(compatibility->if_string);
|
||||
if (CS) C->edition->compatibility = CS;
|
||||
else {
|
||||
TEMPORARY_TEXT(err)
|
||||
WRITE_TO(err, "cannot read compatibility '%S'", compatibility->if_string);
|
||||
Copies::attach_error(C, CopyErrors::new_T(METADATA_MALFORMED_CE, -1, err));
|
||||
DISCARD_TEXT(err)
|
||||
}
|
||||
|
||||
@ The following returns the schema needed for (b); we will load it in from a file
|
||||
in the Inform/Inbuild installation, but will then cache the result so that it
|
||||
loads only once.
|
||||
|
|
|
@ -92,6 +92,9 @@ void LanguageManager::claim_as_copy(inbuild_genre *gen, inbuild_copy **C,
|
|||
|
||||
inbuild_copy *LanguageManager::claim_folder_as_copy(pathname *P) {
|
||||
filename *canary = Filenames::in(P, I"about.txt");
|
||||
if (TextFiles::exists(canary))
|
||||
return LanguageManager::new_copy(Pathnames::directory_name(P), P);
|
||||
canary = Filenames::in(P, I"language_metadata.json");
|
||||
if (TextFiles::exists(canary))
|
||||
return LanguageManager::new_copy(Pathnames::directory_name(P), P);
|
||||
return NULL;
|
||||
|
|
|
@ -74,9 +74,6 @@ void Kits::scan(inbuild_copy *C) {
|
|||
JSONMetadata::read_metadata_file(C, F);
|
||||
|
||||
if (C->metadata_record) {
|
||||
JSON_value *compatibility =
|
||||
JSON::look_up_object(C->metadata_record, I"compatibility");
|
||||
if (compatibility) @<Extract compatibility@>;
|
||||
@<Extract activations@>;
|
||||
JSON_value *kit_details =
|
||||
JSON::look_up_object(C->metadata_record, I"kit-details");
|
||||
|
@ -90,16 +87,6 @@ void Kits::scan(inbuild_copy *C) {
|
|||
}
|
||||
}
|
||||
|
||||
@<Extract compatibility@> =
|
||||
compatibility_specification *CS = Compatibility::from_text(compatibility->if_string);
|
||||
if (CS) C->edition->compatibility = CS;
|
||||
else {
|
||||
TEMPORARY_TEXT(err)
|
||||
WRITE_TO(err, "cannot read compatibility '%S'", compatibility->if_string);
|
||||
Copies::attach_error(C, CopyErrors::new_T(METADATA_MALFORMED_CE, -1, err));
|
||||
DISCARD_TEXT(err)
|
||||
}
|
||||
|
||||
@<Extract activations@> =
|
||||
JSON_value *activates = JSON::look_up_object(C->metadata_record, I"activates");
|
||||
if (activates) {
|
||||
|
@ -235,11 +222,11 @@ A project can call this to obtain the |inform_kit| structure for the copy of
|
|||
a kit, going only on a name such as |BasicInformKit|:
|
||||
|
||||
=
|
||||
inform_kit *Kits::find_by_name(text_stream *name, linked_list *nest_list) {
|
||||
inbuild_requirement *req =
|
||||
Requirements::any_version_of(Works::new(kit_genre, name, I""));
|
||||
inform_kit *Kits::find_by_name(text_stream *name, linked_list *nest_list,
|
||||
inbuild_requirement *req) {
|
||||
if (req == NULL) req = Requirements::any_version_of(Works::new(kit_genre, name, I""));
|
||||
inbuild_search_result *R = Nests::search_for_best(req, nest_list);
|
||||
if (R == NULL) Errors::fatal_with_text("cannot find kit '%S'", name);
|
||||
if (R == NULL) return NULL;
|
||||
inbuild_copy *C = R->copy;
|
||||
return KitManager::from_copy(C);
|
||||
}
|
||||
|
@ -257,7 +244,7 @@ int Kits::perform_ittt(inform_kit *K, inform_project *project, int parity) {
|
|||
if ((ITTT->if_included == parity) &&
|
||||
(Projects::uses_kit(project, ITTT->then_name) == FALSE) &&
|
||||
(Projects::uses_kit(project, ITTT->if_name) == ITTT->if_included)) {
|
||||
Projects::add_kit_dependency(project, ITTT->then_name, NULL, K);
|
||||
Projects::add_kit_dependency(project, ITTT->then_name, NULL, K, NULL);
|
||||
changes_made = TRUE;
|
||||
}
|
||||
return changes_made;
|
||||
|
|
|
@ -13,8 +13,10 @@ typedef struct inform_language {
|
|||
struct inbuild_copy *as_copy;
|
||||
struct wording instance_name; /* instance name, e.g., "German language" */
|
||||
struct instance *nl_instance; /* instance, e.g., "German language" */
|
||||
struct wording language_field[MAX_LANGUAGE_FIELDS]; /* contents of the |about.txt| fields */
|
||||
int adaptive_person; /* which person (one of constants below) text subs are written from */
|
||||
struct text_stream *iso_code; /* e.g., "fr" or "de" */
|
||||
struct text_stream *translated_name; /* e.g., "Français" or "Deutsch" */
|
||||
struct text_stream *native_cue; /* e.g., "en français" or "in deutscher Sprache" */
|
||||
int adaptive_person; /* which person text substitutions are written from */
|
||||
int Preform_loaded; /* has a Preform syntax definition been read for this? */
|
||||
CLASS_DEFINITION
|
||||
} inform_language;
|
||||
|
@ -27,7 +29,6 @@ void Languages::scan(inbuild_copy *C) {
|
|||
L->as_copy = C;
|
||||
if (C == NULL) internal_error("no copy to scan");
|
||||
Copies::set_metadata(C, STORE_POINTER_inform_language(L));
|
||||
|
||||
TEMPORARY_TEXT(sentence_format)
|
||||
WRITE_TO(sentence_format, "%S language", C->edition->work->title);
|
||||
L->instance_name = Feeds::feed_text(sentence_format);
|
||||
|
@ -35,61 +36,108 @@ void Languages::scan(inbuild_copy *C) {
|
|||
L->nl_instance = NULL;
|
||||
L->Preform_loaded = FALSE;
|
||||
L->adaptive_person = -1; /* i.e., none yet specified */
|
||||
for (int n=0; n<MAX_LANGUAGE_FIELDS; n++) L->language_field[n] = EMPTY_WORDING;
|
||||
@<Read the about.txt file for the bundle@>;
|
||||
LOG("Found language bundle '%S' (%p)\n", C->edition->work->title,
|
||||
Languages::path_to_bundle(L));
|
||||
}
|
||||
/* these defaults should always be overwritten */
|
||||
L->iso_code = I"en";
|
||||
L->translated_name = I"English";
|
||||
/* but not this one */
|
||||
L->native_cue = NULL;
|
||||
|
||||
@ Within the bundle folder is a file called |about.txt|, which sets numbered
|
||||
fields to excerpts of text. The following are the field numbers:
|
||||
|
||||
@d NAME_IN_ENGLISH_LFIELD 1 /* e.g. "German" */
|
||||
@d NAME_NATIVE_LFIELD 2 /* e.g. "Deutsch" */
|
||||
@d CUE_NATIVE_LFIELD 3 /* e.g. "in deutscher Sprache" */
|
||||
@d ISO_639_CODE_LFIELD 4 /* e.g. "de": an ISO 639-1 code */
|
||||
@d TRANSLATOR_LFIELD 5 /* e.g. "Team GerX" */
|
||||
@d KIT_LFIELD 6 /* e.g. "GermanLanguageKit" */
|
||||
@d MAX_LANGUAGE_FIELDS 7 /* one more than the highest number above */
|
||||
|
||||
@ If we can't find the file, it doesn't matter except that all of the excerpts
|
||||
remain empty. But we may as well tell the debugging log.
|
||||
|
||||
@d MAX_BUNDLE_ABOUT_LINE_LENGTH 256 /* which is far more than necessary, really */
|
||||
|
||||
@<Read the about.txt file for the bundle@> =
|
||||
filename *about_file = Filenames::in(Languages::path_to_bundle(L), I"about.txt");
|
||||
|
||||
if (TextFiles::read(about_file, FALSE,
|
||||
NULL, FALSE, Languages::read_metadata, NULL, L) == FALSE)
|
||||
LOG("Can't find about file: %f\n", about_file);
|
||||
|
||||
@ The format of the file is very simple. Each line is introduced by a number
|
||||
from 1 to |MAX_LANGUAGE_FIELDS| minus one, and then contains text which
|
||||
extends for the rest of the line.
|
||||
|
||||
=
|
||||
void Languages::read_metadata(text_stream *item_name,
|
||||
text_file_position *tfp, void *vnl) {
|
||||
inform_language *L = (inform_language *) vnl;
|
||||
wording W = Feeds::feed_text(item_name);
|
||||
if (Wordings::nonempty(W)) {
|
||||
vocabulary_entry *ve = Lexer::word(Wordings::first_wn(W));
|
||||
int field = -1;
|
||||
if ((ve) && (Vocabulary::test_vflags(ve, NUMBER_MC)))
|
||||
field = Vocabulary::get_literal_number_value(ve);
|
||||
if ((field >= 1) && (field < MAX_LANGUAGE_FIELDS)) {
|
||||
L->language_field[field] =
|
||||
Wordings::new(Wordings::first_wn(W)+1, Wordings::last_wn(W));
|
||||
} else LOG("Warning: couldn't read about.txt line: %S\n", item_name);
|
||||
if (TextFiles::exists(about_file)) {
|
||||
TEMPORARY_TEXT(err)
|
||||
WRITE_TO(err, "a language bundle should no longer use an 'about.txt' file");
|
||||
Copies::attach_error(C, CopyErrors::new_T(METADATA_MALFORMED_CE, -1, err));
|
||||
DISCARD_TEXT(err)
|
||||
}
|
||||
|
||||
filename *F = Filenames::in(C->location_if_path, I"language_metadata.json");
|
||||
if (TextFiles::exists(F)) {
|
||||
JSONMetadata::read_metadata_file(C, F);
|
||||
if (C->metadata_record) {
|
||||
JSON_value *language_details =
|
||||
JSON::look_up_object(C->metadata_record, I"language-details");
|
||||
if (language_details) @<Extract the language details@>
|
||||
else {
|
||||
TEMPORARY_TEXT(err)
|
||||
WRITE_TO(err, "'language_metadata.json' must contain a \"language-details\" field");
|
||||
Copies::attach_error(C, CopyErrors::new_T(METADATA_MALFORMED_CE, -1, err));
|
||||
DISCARD_TEXT(err)
|
||||
}
|
||||
JSON_value *needs = JSON::look_up_object(C->metadata_record, I"needs");
|
||||
if (needs) {
|
||||
TEMPORARY_TEXT(expected)
|
||||
WRITE_TO(expected, "%SLanguageKit", C->edition->work->title);
|
||||
int found_expected = FALSE;
|
||||
JSON_value *E;
|
||||
LOOP_OVER_LINKED_LIST(E, JSON_value, needs->if_list)
|
||||
@<Extract this requirement@>;
|
||||
if (found_expected == FALSE) {
|
||||
TEMPORARY_TEXT(err)
|
||||
WRITE_TO(err, "language bundle must have dependency on '%S'", expected);
|
||||
Copies::attach_error(C, CopyErrors::new_T(METADATA_MALFORMED_CE, -1, err));
|
||||
DISCARD_TEXT(err)
|
||||
}
|
||||
DISCARD_TEXT(expected)
|
||||
} else {
|
||||
TEMPORARY_TEXT(err)
|
||||
WRITE_TO(err, "'language_metadata.json' must contain a \"needs\" field");
|
||||
Copies::attach_error(C, CopyErrors::new_T(METADATA_MALFORMED_CE, -1, err));
|
||||
DISCARD_TEXT(err)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
TEMPORARY_TEXT(err)
|
||||
WRITE_TO(err, "a language bundle must now provide a 'language_metadata.json' file");
|
||||
Copies::attach_error(C, CopyErrors::new_T(METADATA_MALFORMED_CE, -1, err));
|
||||
DISCARD_TEXT(err)
|
||||
}
|
||||
}
|
||||
|
||||
@<Extract the language details@> =
|
||||
JSON_value *translated_name = JSON::look_up_object(language_details, I"translated-name");
|
||||
if (translated_name) L->translated_name = Str::duplicate(translated_name->if_string);
|
||||
|
||||
JSON_value *iso_code = JSON::look_up_object(language_details, I"iso-639-1-code");
|
||||
if (iso_code) L->iso_code = Str::duplicate(iso_code->if_string);
|
||||
|
||||
JSON_value *translated_syntax_cue = JSON::look_up_object(language_details, I"translated-syntax-cue");
|
||||
if (translated_syntax_cue) L->native_cue = Str::duplicate(translated_syntax_cue->if_string);
|
||||
|
||||
@<Extract this requirement@> =
|
||||
JSON_value *if_clause = JSON::look_up_object(E, I"if");
|
||||
JSON_value *unless_clause = JSON::look_up_object(E, I"unless");
|
||||
if ((if_clause) || (unless_clause)) {
|
||||
TEMPORARY_TEXT(err)
|
||||
WRITE_TO(err, "a language bundle's needs must be unconditional");
|
||||
Copies::attach_error(C, CopyErrors::new_T(METADATA_MALFORMED_CE, -1, err));
|
||||
DISCARD_TEXT(err)
|
||||
}
|
||||
JSON_value *need_clause = JSON::look_up_object(E, I"need");
|
||||
if (need_clause) {
|
||||
JSON_value *need_type = JSON::look_up_object(need_clause, I"type");
|
||||
JSON_value *need_title = JSON::look_up_object(need_clause, I"title");
|
||||
JSON_value *need_version_range = JSON::look_up_object(need_clause, I"version-range");
|
||||
if (Str::eq(need_type->if_string, I"kit")) {
|
||||
if (Str::eq(expected, need_title->if_string)) found_expected = TRUE;
|
||||
if (need_version_range) {
|
||||
TEMPORARY_TEXT(err)
|
||||
WRITE_TO(err, "version ranges on kit dependencies are not yet implemented");
|
||||
Copies::attach_error(C, CopyErrors::new_T(METADATA_MALFORMED_CE, -1, err));
|
||||
DISCARD_TEXT(err)
|
||||
}
|
||||
} else {
|
||||
TEMPORARY_TEXT(err)
|
||||
WRITE_TO(err, "a language can only have kits as dependencies");
|
||||
Copies::attach_error(C, CopyErrors::new_T(METADATA_MALFORMED_CE, -1, err));
|
||||
DISCARD_TEXT(err)
|
||||
}
|
||||
}
|
||||
|
||||
@ =
|
||||
pathname *Languages::path_to_bundle(inform_language *L) {
|
||||
return L->as_copy->location_if_path;
|
||||
}
|
||||
|
||||
|
||||
@h Logging.
|
||||
|
||||
=
|
||||
|
@ -109,22 +157,36 @@ void Languages::write_ISO_code(OUTPUT_STREAM, inform_language *L) {
|
|||
#ifdef CORE_MODULE
|
||||
if (L == NULL) L = DefaultLanguage::get(NULL);
|
||||
#endif
|
||||
if (Wordings::nonempty(L->language_field[ISO_639_CODE_LFIELD]))
|
||||
WRITE("%+W", L->language_field[ISO_639_CODE_LFIELD]);
|
||||
else WRITE("en");
|
||||
WRITE("%S", L->iso_code);
|
||||
}
|
||||
|
||||
@h Kit.
|
||||
Each language needs its own kit of Inter code, named as follows:
|
||||
Each language needs its own kit(s) of Inter code, given in the dependencies:
|
||||
|
||||
=
|
||||
text_stream *Languages::kit_name(inform_language *L) {
|
||||
text_stream *T = Str::new();
|
||||
if (Wordings::nonempty(L->language_field[KIT_LFIELD]))
|
||||
WRITE_TO(T, "%+W", L->language_field[KIT_LFIELD]);
|
||||
else
|
||||
WRITE_TO(T, "%+WLanguageKit", L->language_field[NAME_IN_ENGLISH_LFIELD]);
|
||||
return T;
|
||||
void Languages::add_kit_dependencies_to_project(inform_language *L, inform_project *project) {
|
||||
if (L == NULL) internal_error("no language");
|
||||
JSON_value *md = L->as_copy->metadata_record;
|
||||
if (md == NULL) return; /* should never happen, but fail safe */
|
||||
JSON_value *needs = JSON::look_up_object(md, I"needs");
|
||||
if (needs == NULL) return; /* should never happen, but fail safe */
|
||||
JSON_value *E;
|
||||
LOOP_OVER_LINKED_LIST(E, JSON_value, needs->if_list) {
|
||||
JSON_value *need_clause = JSON::look_up_object(E, I"need");
|
||||
if (need_clause) {
|
||||
JSON_value *need_type = JSON::look_up_object(need_clause, I"type");
|
||||
JSON_value *need_title = JSON::look_up_object(need_clause, I"title");
|
||||
JSON_value *need_version = JSON::look_up_object(need_clause, I"version");
|
||||
if (Str::eq(need_type->if_string, I"kit")) {
|
||||
inbuild_work *work = Works::new_raw(kit_genre, need_title->if_string, I"");
|
||||
inbuild_requirement *req;
|
||||
if (need_version) req = Requirements::new(work,
|
||||
VersionNumberRanges::compatibility_range(VersionNumbers::from_text(need_version->if_string)));
|
||||
else req = Requirements::any_version_of(work);
|
||||
Projects::add_kit_dependency(project, need_title->if_string, L, NULL, req);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@h Finding by name.
|
||||
|
@ -135,13 +197,15 @@ include the Materials folder for any relevant project.
|
|||
|
||||
=
|
||||
linked_list *search_list_for_Preform_callback = NULL;
|
||||
void Languages::read_Preform_definition(inform_language *L, linked_list *S) {
|
||||
int Languages::read_Preform_definition(inform_language *L, linked_list *S) {
|
||||
if (L == NULL) internal_error("no language");
|
||||
if (L->Preform_loaded == FALSE) {
|
||||
L->Preform_loaded = TRUE;
|
||||
search_list_for_Preform_callback = S;
|
||||
(*shared_preform_callback)(L);
|
||||
int n = (*shared_preform_callback)(L);
|
||||
if (n == 0) return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ This function is called only from Preform...
|
||||
|
@ -164,6 +228,21 @@ inform_language *Languages::find_for(text_stream *name, linked_list *search) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
@ Or we can convert the native cue, |en français|, to the name, |French|:
|
||||
|
||||
=
|
||||
text_stream *Languages::find_by_native_cue(text_stream *cue, linked_list *search) {
|
||||
linked_list *results = NEW_LINKED_LIST(inbuild_search_result);
|
||||
Nests::search_for(Requirements::anything_of_genre(language_genre), search, results);
|
||||
inbuild_search_result *search_result;
|
||||
LOOP_OVER_LINKED_LIST(search_result, inbuild_search_result, results) {
|
||||
inform_language *L = LanguageManager::from_copy(search_result->copy);
|
||||
if (Str::eq_insensitive(cue, L->native_cue))
|
||||
return L->as_copy->edition->work->title;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ Finally, the following Preform nonterminal matches the English-language
|
||||
name of a language: for example, "French". Unlike the above functions, it
|
||||
looks only at languages already loaded, and doesn't scan nests for more.
|
||||
|
|
|
@ -17,7 +17,9 @@ typedef struct inform_project {
|
|||
struct semantic_version_number version;
|
||||
struct linked_list *source_vertices; /* of |build_vertex| */
|
||||
struct linked_list *kits_to_include; /* of |kit_dependency| */
|
||||
struct text_stream *name_of_language_of_play;
|
||||
struct inform_language *language_of_play;
|
||||
struct text_stream *clue_for_language_of_syntax;
|
||||
struct inform_language *language_of_syntax;
|
||||
struct inform_language *language_of_index;
|
||||
struct build_vertex *unblorbed_vertex;
|
||||
|
@ -46,7 +48,9 @@ void Projects::scan(inbuild_copy *C) {
|
|||
proj->version = VersionNumbers::null();
|
||||
proj->source_vertices = NEW_LINKED_LIST(build_vertex);
|
||||
proj->kits_to_include = NEW_LINKED_LIST(kit_dependency);
|
||||
proj->name_of_language_of_play = I"English";
|
||||
proj->language_of_play = NULL;
|
||||
proj->clue_for_language_of_syntax = NULL;
|
||||
proj->language_of_syntax = NULL;
|
||||
proj->language_of_index = NULL;
|
||||
proj->chosen_build_target = NULL;
|
||||
|
@ -67,6 +71,7 @@ void Projects::scan(inbuild_copy *C) {
|
|||
proj->search_list = NEW_LINKED_LIST(inbuild_nest);
|
||||
proj->primary_source = NULL;
|
||||
proj->extensions_included = NEW_LINKED_LIST(inform_extension);
|
||||
Projects::scan_bibliographic_data(proj);
|
||||
}
|
||||
|
||||
@ The materials folder sits alongside the project and has the same name,
|
||||
|
@ -249,10 +254,6 @@ First, the "language of play" is the one in which dialogue is printed and parsed
|
|||
at run-time.
|
||||
|
||||
=
|
||||
void Projects::set_language_of_play(inform_project *proj, inform_language *L) {
|
||||
if (proj == NULL) internal_error("no project");
|
||||
proj->language_of_play = L;
|
||||
}
|
||||
inform_language *Projects::get_language_of_play(inform_project *proj) {
|
||||
if (proj == NULL) return NULL;
|
||||
return proj->language_of_play;
|
||||
|
@ -275,26 +276,48 @@ inform_language *Projects::get_language_of_index(inform_project *proj) {
|
|||
project is written. For the Basic Inform extension, for example, it is English.
|
||||
|
||||
=
|
||||
void Projects::set_language_of_syntax(inform_project *proj, inform_language *L) {
|
||||
if (proj == NULL) internal_error("no project");
|
||||
proj->language_of_syntax = L;
|
||||
}
|
||||
inform_language *Projects::get_language_of_syntax(inform_project *proj) {
|
||||
if (proj == NULL) return NULL;
|
||||
return proj->language_of_syntax;
|
||||
}
|
||||
|
||||
@ And this is where these are decided.
|
||||
@ And this is where the languages of play and syntax are set, using metadata
|
||||
previously extracted by //Projects::scan_bibliographic_data//. Note that they
|
||||
are set only once, and can't be changed after that.
|
||||
|
||||
=
|
||||
void Projects::set_languages(inform_project *proj) {
|
||||
if (proj == NULL) internal_error("no project");
|
||||
inform_language *E = Languages::find_for(I"English", Projects::nest_list(proj));
|
||||
if (E) {
|
||||
proj->language_of_play = E;
|
||||
proj->language_of_syntax = E;
|
||||
proj->language_of_index = E;
|
||||
} else internal_error("built-in English language definition can't be found");
|
||||
text_stream *S_name = I"English";
|
||||
text_stream *S_clue = proj->clue_for_language_of_syntax;
|
||||
if (Str::len(S_clue) > 0)
|
||||
S_name = Languages::find_by_native_cue(S_clue, Projects::nest_list(proj));
|
||||
if (Str::len(S_name) == 0) proj->language_of_syntax = NULL;
|
||||
else proj->language_of_syntax = Languages::find_for(S_name, Projects::nest_list(proj));
|
||||
if (proj->language_of_syntax == NULL) {
|
||||
text_stream *bad_language = Str::duplicate(S_name);
|
||||
if (Str::len(S_clue) > 0) {
|
||||
Str::clear(bad_language);
|
||||
WRITE_TO(bad_language, "language meant by '%S'", S_clue);
|
||||
}
|
||||
build_vertex *RV = Graphs::req_vertex(
|
||||
Requirements::any_version_of(Works::new(language_genre, bad_language, I"")));
|
||||
Graphs::need_this_to_build(proj->as_copy->vertex, RV);
|
||||
}
|
||||
if (Str::len(proj->name_of_language_of_play) == 0) {
|
||||
proj->language_of_play = proj->language_of_syntax;
|
||||
} else {
|
||||
text_stream *name = proj->name_of_language_of_play;
|
||||
inform_language *L = Languages::find_for(name, Projects::nest_list(proj));
|
||||
if (L) {
|
||||
proj->language_of_play = L;
|
||||
} else {
|
||||
build_vertex *RV = Graphs::req_vertex(
|
||||
Requirements::any_version_of(Works::new(language_genre, name, I"")));
|
||||
Graphs::need_this_to_build(proj->as_copy->vertex, RV);
|
||||
}
|
||||
}
|
||||
proj->language_of_index = proj->language_of_syntax;
|
||||
}
|
||||
|
||||
@h Miscellaneous metadata.
|
||||
|
@ -335,13 +358,21 @@ typedef struct kit_dependency {
|
|||
|
||||
@ =
|
||||
void Projects::add_kit_dependency(inform_project *project, text_stream *kit_name,
|
||||
inform_language *because_of_language, inform_kit *because_of_kit) {
|
||||
inform_language *because_of_language, inform_kit *because_of_kit,
|
||||
inbuild_requirement *req) {
|
||||
if (Projects::uses_kit(project, kit_name)) return;
|
||||
kit_dependency *kd = CREATE(kit_dependency);
|
||||
kd->kit = Kits::find_by_name(kit_name, Projects::nest_list(project));
|
||||
kd->because_of_language = because_of_language;
|
||||
kd->because_of_kit = because_of_kit;
|
||||
ADD_TO_LINKED_LIST(kd, kit_dependency, project->kits_to_include);
|
||||
inform_kit *K = Kits::find_by_name(kit_name, Projects::nest_list(project), req);
|
||||
if (K) {
|
||||
kit_dependency *kd = CREATE(kit_dependency);
|
||||
kd->kit = K;
|
||||
kd->because_of_language = because_of_language;
|
||||
kd->because_of_kit = because_of_kit;
|
||||
ADD_TO_LINKED_LIST(kd, kit_dependency, project->kits_to_include);
|
||||
} else {
|
||||
build_vertex *RV = Graphs::req_vertex(
|
||||
Requirements::any_version_of(Works::new_raw(kit_genre, kit_name, I"")));
|
||||
Graphs::need_this_to_build(project->as_copy->vertex, RV);
|
||||
}
|
||||
}
|
||||
|
||||
@ This can also be used to test on the fly:
|
||||
|
@ -376,14 +407,12 @@ on //WorldModelKit//, through the if-this-then-that mechanism.
|
|||
@<Add dependencies for the standard kits@> =
|
||||
int no_word_from_user = TRUE;
|
||||
if (LinkedLists::len(project->kits_to_include) > 0) no_word_from_user = FALSE;
|
||||
Projects::add_kit_dependency(project, I"BasicInformKit", NULL, NULL);
|
||||
Projects::add_kit_dependency(project, I"BasicInformKit", NULL, NULL, NULL);
|
||||
inform_language *L = project->language_of_play;
|
||||
if (L) {
|
||||
text_stream *kit_name = Languages::kit_name(L);
|
||||
Projects::add_kit_dependency(project, kit_name, L, NULL);
|
||||
}
|
||||
if (L) Languages::add_kit_dependencies_to_project(L, project);
|
||||
else internal_error("no language of play");
|
||||
if (no_word_from_user)
|
||||
Projects::add_kit_dependency(project, I"CommandParserKit", NULL, NULL);
|
||||
Projects::add_kit_dependency(project, I"CommandParserKit", NULL, NULL, NULL);
|
||||
|
||||
@ We perform this first with |parity| being |TRUE|, then |FALSE|.
|
||||
|
||||
|
@ -743,7 +772,17 @@ For a real-world example of the result, see //inform7: Performance Metrics//.
|
|||
|
||||
=
|
||||
void Projects::read_source_text_for(inform_project *proj) {
|
||||
Languages::read_Preform_definition(proj->language_of_syntax, proj->search_list);
|
||||
inform_language *E = Languages::find_for(I"English", Projects::nest_list(proj));
|
||||
if (E == NULL) return;
|
||||
Languages::read_Preform_definition(E, proj->search_list);
|
||||
if ((proj->language_of_syntax) && (proj->language_of_syntax != E)) {
|
||||
if (Languages::read_Preform_definition(
|
||||
proj->language_of_syntax, proj->search_list) == FALSE) {
|
||||
copy_error *CE = CopyErrors::new_T(SYNTAX_CE, UnavailableLOS_SYNERROR,
|
||||
proj->language_of_syntax->as_copy->edition->work->title);
|
||||
Copies::attach_error(proj->as_copy, CE);
|
||||
}
|
||||
}
|
||||
Sentences::set_start_of_source(sfsm, -1);
|
||||
|
||||
parse_node *inclusions_heading, *implicit_heading;
|
||||
|
@ -838,3 +877,148 @@ place of... instructions after the sweep for inclusions.
|
|||
#endif
|
||||
Inclusions::traverse(proj->as_copy, proj->syntax_tree);
|
||||
Headings::satisfy_dependencies(proj, proj->syntax_tree, proj->as_copy);
|
||||
|
||||
@h The bibliographic sentence.
|
||||
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: in other words, to wait until the syntax tree for a
|
||||
project has been read in.
|
||||
|
||||
But this isn't fast enough, because the sentence also specifies the language
|
||||
of syntax, and we need to know of any non-English choice immediately. We
|
||||
don't even want to use Preform to parse the sentence, either, because we might
|
||||
want to load a different Preform file depending on that non-English choice.
|
||||
|
||||
So the following rapid scan catches just the first sentence of the first
|
||||
source file of the project.
|
||||
|
||||
@e BadTitleSentence_SYNERROR
|
||||
|
||||
=
|
||||
void Projects::scan_bibliographic_data(inform_project *proj) {
|
||||
linked_list *L = Projects::source(proj);
|
||||
build_vertex *N;
|
||||
LOOP_OVER_LINKED_LIST(N, build_vertex, L) {
|
||||
filename *F = N->as_file;
|
||||
FILE *SF = Filenames::fopen_caseless(F, "r");
|
||||
if (SF == NULL) break; /* no source means no bibliographic data */
|
||||
@<Read the opening sentence@>;
|
||||
fclose(SF);
|
||||
break; /* so that we look only at the first source file */
|
||||
}
|
||||
}
|
||||
|
||||
@<Read the opening sentence@> =
|
||||
TEMPORARY_TEXT(bibliographic_sentence)
|
||||
TEMPORARY_TEXT(bracketed)
|
||||
@<Capture the opening sentence and its bracketed part@>;
|
||||
if ((Str::len(bibliographic_sentence) > 0) &&
|
||||
(Str::get_first_char(bibliographic_sentence) == '"'))
|
||||
@<The opening sentence is bibliographic, so scan it@>;
|
||||
DISCARD_TEXT(bibliographic_sentence)
|
||||
DISCARD_TEXT(bracketed)
|
||||
|
||||
@ A bibliographic sentence can optionally give a language, by use of "(in ...)":
|
||||
|
||||
>> "Bonjour Albertine" by Marcel Proust (in French)
|
||||
|
||||
If so, the following writes |"Bonjour Albertine" by Marcel Proust| to the
|
||||
text |bibliographic_sentence| and |in French| to the text |bracketed|. If not,
|
||||
the whole thing goes into |bibliographic_sentence| and |bracketed| is empty.
|
||||
|
||||
@<Capture the opening sentence and its bracketed part@> =
|
||||
int c, commented = FALSE, quoted = FALSE, rounded = FALSE, content_found = FALSE;
|
||||
while ((c = TextFiles::utf8_fgetc(SF, NULL, FALSE, NULL)) != EOF) {
|
||||
if (c == 0xFEFF) continue; /* skip the optional Unicode BOM pseudo-character */
|
||||
if (commented) {
|
||||
if (c == ']') commented = FALSE;
|
||||
} else {
|
||||
if (quoted) {
|
||||
if (rounded) PUT_TO(bracketed, c);
|
||||
else PUT_TO(bibliographic_sentence, c);
|
||||
if (c == '"') quoted = FALSE;
|
||||
} else {
|
||||
if (c == '[') commented = TRUE;
|
||||
else {
|
||||
if (Characters::is_whitespace(c) == FALSE) content_found = TRUE;
|
||||
if (rounded) {
|
||||
if (c == '"') quoted = TRUE;
|
||||
if ((c == '\x0a') || (c == '\x0d') || (c == '\n')) c = ' ';
|
||||
if (c == ')') rounded = FALSE;
|
||||
else PUT_TO(bracketed, c);
|
||||
} else {
|
||||
if (c == '(') rounded = TRUE;
|
||||
else {
|
||||
if ((c == '\x0a') || (c == '\x0d') || (c == '\n')) {
|
||||
if (content_found) break;
|
||||
c = ' ';
|
||||
PUT_TO(bibliographic_sentence, c);
|
||||
} else {
|
||||
PUT_TO(bibliographic_sentence, c);
|
||||
}
|
||||
if (c == '"') quoted = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Str::trim_white_space(bibliographic_sentence);
|
||||
Str::trim_white_space(bracketed);
|
||||
if (Str::get_last_char(bibliographic_sentence) == '.')
|
||||
Str::delete_last_character(bibliographic_sentence);
|
||||
|
||||
@ The author is sometimes given outside of quotation marks:
|
||||
|
||||
>> "The Large Scale Structure of Space-Time" by Lindsay Lohan
|
||||
|
||||
But not always:
|
||||
|
||||
>> "Greek Rural Postmen and Their Cancellation Numbers" by "will.i.am"
|
||||
|
||||
@<The opening sentence is bibliographic, so scan it@> =
|
||||
match_results mr = Regexp::create_mr();
|
||||
if (Regexp::match(&mr, bibliographic_sentence, L"\"([^\"]+)\" by \"([^\"]+)\"")) {
|
||||
text_stream *title = mr.exp[0];
|
||||
text_stream *author = mr.exp[1];
|
||||
@<Set title and author@>;
|
||||
} else if (Regexp::match(&mr, bibliographic_sentence, L"\"([^\"]+)\" by ([^\"]+)")) {
|
||||
text_stream *title = mr.exp[0];
|
||||
text_stream *author = mr.exp[1];
|
||||
@<Set title and author@>;
|
||||
} else if (Regexp::match(&mr, bibliographic_sentence, L"\"([^\"]+)\"")) {
|
||||
text_stream *title = mr.exp[0];
|
||||
text_stream *author = NULL;
|
||||
@<Set title and author@>;
|
||||
} else {
|
||||
@<Flag bad bibliographic sentence@>;
|
||||
}
|
||||
Regexp::dispose_of(&mr);
|
||||
if (Str::len(bracketed) > 0) {
|
||||
match_results mr = Regexp::create_mr();
|
||||
if (Regexp::match(&mr, bracketed, L"in (%c+)")) @<Set language of play@>
|
||||
else proj->clue_for_language_of_syntax = Str::duplicate(bracketed);
|
||||
Regexp::dispose_of(&mr);
|
||||
}
|
||||
|
||||
@<Set language of play@> =
|
||||
text_stream *language_name = mr.exp[0];
|
||||
proj->name_of_language_of_play = Str::duplicate(language_name);
|
||||
|
||||
@<Set title and author@> =
|
||||
if (Str::len(title) > 0) {
|
||||
text_stream *T = proj->as_copy->edition->work->title;
|
||||
Str::clear(T);
|
||||
WRITE_TO(T, "%S", title);
|
||||
}
|
||||
if (Str::len(author) > 0) {
|
||||
if (proj->as_copy->edition->work->author_name == NULL)
|
||||
proj->as_copy->edition->work->author_name = Str::new();
|
||||
text_stream *A = proj->as_copy->edition->work->author_name;
|
||||
Str::clear(A);
|
||||
WRITE_TO(A, "%S", author);
|
||||
}
|
||||
|
||||
@<Flag bad bibliographic sentence@> =
|
||||
copy_error *CE = CopyErrors::new(SYNTAX_CE, BadTitleSentence_SYNERROR);
|
||||
Copies::attach_error(proj->as_copy, CE);
|
||||
|
|
|
@ -148,6 +148,7 @@ add to those generated in //syntax//.
|
|||
@e ExtVersionMalformed_SYNERROR
|
||||
@e ExtInadequateVM_SYNERROR
|
||||
@e ExtMisidentifiedEnds_SYNERROR
|
||||
@e UnavailableLOS_SYNERROR
|
||||
|
||||
@ The next tweak to //syntax// is to give it some node metadata. //syntax//
|
||||
itself places nodes of a small number of basic types into the syntax tree;
|
||||
|
|
|
@ -1,85 +0,0 @@
|
|||
[BiblioSentence::] The Bibliographic Sentence.
|
||||
|
||||
That line at the top of an Inform source text, saying what it is and who wrote it.
|
||||
|
||||
@ 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: in other words, to wait until the syntax tree for a
|
||||
project has been read in.
|
||||
|
||||
But this isn't fast enough, because the sentence also specifies the language
|
||||
of syntax, and we need to know of any non-English choice immediately. So a
|
||||
special hook in the //syntax// module calls the following function as soon as
|
||||
such a sentence is found; thus, it happens during sentence-breaking, not
|
||||
after it, and may therefore affect how subsequent sentences are broken.
|
||||
|
||||
@e BadTitleSentence_SYNERROR
|
||||
|
||||
=
|
||||
void BiblioSentence::notify(inform_project *proj, parse_node *PN) {
|
||||
wording W = Node::get_text(PN);
|
||||
if (<titling-line>(W)) {
|
||||
text_stream *T = proj->as_copy->edition->work->title;
|
||||
if (proj->as_copy->edition->work->author_name == NULL)
|
||||
proj->as_copy->edition->work->author_name = Str::new();
|
||||
text_stream *A = proj->as_copy->edition->work->author_name;
|
||||
inform_language *L = <<rp>>;
|
||||
if (L) {
|
||||
Projects::set_language_of_play(proj, L);
|
||||
LOG("Language of play: %S\n", L->as_copy->edition->work->title);
|
||||
}
|
||||
@<Extract title and author name wording@>;
|
||||
@<Dequote the title and, perhaps, author name@>;
|
||||
} else {
|
||||
copy_error *CE = CopyErrors::new(SYNTAX_CE, BadTitleSentence_SYNERROR);
|
||||
CopyErrors::supply_node(CE, PN);
|
||||
Copies::attach_error(proj->as_copy, CE);
|
||||
}
|
||||
}
|
||||
|
||||
@ This is what the top line of the main source text should look like, if it's
|
||||
to declare the title and author.
|
||||
|
||||
=
|
||||
<titling-line> ::=
|
||||
<plain-titling-line> ( in <natural-language> ) | ==> { R[1], RP[2] }
|
||||
<plain-titling-line> ==> { R[1], NULL }
|
||||
|
||||
<plain-titling-line> ::=
|
||||
{<quoted-text-without-subs>} by ... | ==> { TRUE, - }
|
||||
{<quoted-text-without-subs>} ==> { FALSE, - }
|
||||
|
||||
@<Extract title and author name wording@> =
|
||||
wording TW = GET_RW(<plain-titling-line>, 1);
|
||||
wording AW = EMPTY_WORDING;
|
||||
if (<<r>>) AW = GET_RW(<plain-titling-line>, 2);
|
||||
Str::clear(T);
|
||||
WRITE_TO(T, "%+W", TW);
|
||||
if (Wordings::nonempty(AW)) {
|
||||
Str::clear(A);
|
||||
WRITE_TO(A, "%+W", AW);
|
||||
}
|
||||
|
||||
@ The author is sometimes given outside of quotation marks:
|
||||
|
||||
>> "The Large Scale Structure of Space-Time" by Lindsay Lohan
|
||||
|
||||
But not always:
|
||||
|
||||
>> "Greek Rural Postmen and Their Cancellation Numbers" by "will.i.am"
|
||||
|
||||
@<Dequote the title and, perhaps, author name@> =
|
||||
Str::trim_white_space(T);
|
||||
if ((Str::get_first_char(T) == '\"') && (Str::get_last_char(T) == '\"')) {
|
||||
Str::delete_first_character(T);
|
||||
Str::delete_last_character(T);
|
||||
Str::trim_white_space(T);
|
||||
}
|
||||
LOG("Title: %S\n", T);
|
||||
Str::trim_white_space(A);
|
||||
if ((Str::get_first_char(A) == '\"') && (Str::get_last_char(A) == '\"')) {
|
||||
Str::delete_first_character(A);
|
||||
Str::delete_last_character(A);
|
||||
Str::trim_white_space(A);
|
||||
}
|
||||
if (Str::len(A) > 0) LOG("Author: %S\n", A);
|
|
@ -52,7 +52,6 @@ Chapter 5: Genre Services
|
|||
Chapter 6: Inform Source Text
|
||||
Source Text
|
||||
Headings
|
||||
The Bibliographic Sentence
|
||||
The Options File
|
||||
Inclusions
|
||||
Control Structures
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
Size of lexicon: 3102 excerpt meanings
|
||||
Stored among 840 words out of total vocabulary of 10569
|
||||
Stored among 840 words out of total vocabulary of 10547
|
||||
710 words have a start list: longest belongs to report (with 293 meanings)
|
||||
15 words have an end list: longest belongs to case (with 6 meanings)
|
||||
29 words have a middle list: longest belongs to to (with 4 meanings)
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,34 +1,34 @@
|
|||
Total memory consumption was 123597K = 121 MB
|
||||
Total memory consumption was 123094K = 120 MB
|
||||
|
||||
---- was used for 2045717 objects, in 363244 frames in 0 x 800K = 0K = 0 MB:
|
||||
---- was used for 2046598 objects, in 363729 frames in 0 x 800K = 0K = 0 MB:
|
||||
|
||||
33.0% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
|
||||
20.5% text_stream_array 4609 x 100 = 460900 objects, 25957888 bytes
|
||||
19.2% linked_list 43564 objects, 24395840 bytes
|
||||
33.1% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
|
||||
20.6% text_stream_array 4613 x 100 = 461300 objects, 25980416 bytes
|
||||
19.3% linked_list 43625 objects, 24430000 bytes
|
||||
11.1% inter_symbol_array 132 x 1024 = 135168 objects, 14061696 bytes
|
||||
10.4% inter_error_stash_array 101 x 1024 = 103424 objects, 13241504 bytes
|
||||
8.1% parse_node 129706 objects, 10376480 bytes
|
||||
10.5% inter_error_stash_array 101 x 1024 = 103424 objects, 13241504 bytes
|
||||
8.2% parse_node 129706 objects, 10376480 bytes
|
||||
5.8% verb_conjugation 160 objects, 7425280 bytes
|
||||
4.3% parse_node_annotation_array 346 x 500 = 173000 objects, 5547072 bytes
|
||||
4.4% parse_node_annotation_array 346 x 500 = 173000 objects, 5547072 bytes
|
||||
2.6% pcalc_prop_array 25 x 1000 = 25000 objects, 3400800 bytes
|
||||
2.5% inter_name_array 67 x 1000 = 67000 objects, 3218144 bytes
|
||||
2.0% kind_array 66 x 1000 = 66000 objects, 2642112 bytes
|
||||
1.6% inter_name_generator_array 51 x 1000 = 51000 objects, 2041632 bytes
|
||||
1.5% inter_schema_token 13964 objects, 2010816 bytes
|
||||
1.5% scan_directory 466 objects, 1923648 bytes
|
||||
1.4% package_request 21153 objects, 1861464 bytes
|
||||
1.4% vocabulary_entry_array 161 x 100 = 16100 objects, 1808352 bytes
|
||||
1.2% dict_entry_array 470 x 100 = 47000 objects, 1519040 bytes
|
||||
1.1% match_trie_array 11 x 1000 = 11000 objects, 1496352 bytes
|
||||
1.1% inter_symbols_table 26592 objects, 1489152 bytes
|
||||
1.0% i6_schema_array 23 x 100 = 2300 objects, 1380736 bytes
|
||||
1.0% scan_directory 314 objects, 1296192 bytes
|
||||
1.0% inter_package 26592 objects, 1276416 bytes
|
||||
0.8% map_data 671 objects, 1127280 bytes
|
||||
0.8% id_body 942 objects, 1077648 bytes
|
||||
0.7% adjective_meaning 202 objects, 1000304 bytes
|
||||
0.7% excerpt_meaning 3102 objects, 967824 bytes
|
||||
0.7% production 3882 objects, 900624 bytes
|
||||
0.6% ptoken 8414 objects, 875056 bytes
|
||||
0.7% production 3878 objects, 899696 bytes
|
||||
0.6% ptoken 8404 objects, 874016 bytes
|
||||
0.6% grammatical_usage 3613 objects, 867120 bytes
|
||||
0.6% individual_form 2563 objects, 861168 bytes
|
||||
0.6% inter_schema_node 8917 objects, 856032 bytes
|
||||
|
@ -36,7 +36,7 @@ Total memory consumption was 123597K = 121 MB
|
|||
0.3% local_variable_array 47 x 100 = 4700 objects, 452704 bytes
|
||||
0.3% verb_usage 1128 objects, 388032 bytes
|
||||
0.2% rule 470 objects, 368480 bytes
|
||||
0.2% dictionary 7557 objects, 362736 bytes
|
||||
0.2% dictionary 7587 objects, 364176 bytes
|
||||
0.2% verb_form 386 objects, 348944 bytes
|
||||
0.2% noun 2382 objects, 285840 bytes
|
||||
0.2% compilation_subtask 3355 objects, 268400 bytes
|
||||
|
@ -47,7 +47,7 @@ Total memory consumption was 123597K = 121 MB
|
|||
0.1% hierarchy_location 1122 objects, 161568 bytes
|
||||
0.1% linguistic_stock_item 3318 objects, 159264 bytes
|
||||
0.1% rule_family_data 401 objects, 147568 bytes
|
||||
0.1% nonterminal 760 objects, 139840 bytes
|
||||
0.1% nonterminal 758 objects, 139472 bytes
|
||||
0.1% nascent_array 2127 objects, 136128 bytes
|
||||
---- documentation_ref 1273 objects, 112024 bytes
|
||||
---- inference 1703 objects, 108992 bytes
|
||||
|
@ -85,7 +85,7 @@ Total memory consumption was 123597K = 121 MB
|
|||
---- shared_variable_access_list_array 12 x 100 = 1200 objects, 38784 bytes
|
||||
---- parsing_data 671 objects, 37576 bytes
|
||||
---- heading 198 objects, 36432 bytes
|
||||
---- production_list 617 objects, 34552 bytes
|
||||
---- production_list 615 objects, 34440 bytes
|
||||
---- regions_data 671 objects, 32208 bytes
|
||||
---- counting_data 671 objects, 32208 bytes
|
||||
---- property_permission 96 objects, 31488 bytes
|
||||
|
@ -108,15 +108,15 @@ Total memory consumption was 123597K = 121 MB
|
|||
---- to_phrase_request 59 objects, 16048 bytes
|
||||
---- action_name_list_array 1 x 1000 objects, 16032 bytes
|
||||
---- match_avinue_array 1 x 1000 objects, 16032 bytes
|
||||
---- JSON_value 181 objects, 15928 bytes
|
||||
---- filename 391 objects, 15640 bytes
|
||||
---- adjective 137 objects, 15344 bytes
|
||||
---- generated_segment 14 objects, 14784 bytes
|
||||
---- pathname 330 objects, 13200 bytes
|
||||
---- booking_list 407 objects, 13024 bytes
|
||||
---- adjective_iname_holder 320 objects, 12800 bytes
|
||||
---- pathname 310 objects, 12400 bytes
|
||||
---- uniqueness_count 453 objects, 10872 bytes
|
||||
---- inter_construct 30 objects, 10320 bytes
|
||||
---- filename 253 objects, 10120 bytes
|
||||
---- JSON_value 103 objects, 9064 bytes
|
||||
---- stopwatch_timer 113 objects, 9040 bytes
|
||||
---- equation_node 68 objects, 7616 bytes
|
||||
---- understanding_item_array 3 x 100 = 300 objects, 7296 bytes
|
||||
|
@ -125,8 +125,8 @@ Total memory consumption was 123597K = 121 MB
|
|||
---- build_vertex 60 objects, 7200 bytes
|
||||
---- verb 108 objects, 6912 bytes
|
||||
---- hierarchy_attachment_point 77 objects, 6776 bytes
|
||||
---- inbuild_work 103 objects, 6592 bytes
|
||||
---- text_literal_holder 163 objects, 6520 bytes
|
||||
---- inbuild_work 101 objects, 6464 bytes
|
||||
---- inbuild_copy 55 objects, 6160 bytes
|
||||
---- heading_tree 20 objects, 5440 bytes
|
||||
---- inbuild_edition 74 objects, 5328 bytes
|
||||
|
@ -141,21 +141,21 @@ Total memory consumption was 123597K = 121 MB
|
|||
---- property_setting_bp_data 84 objects, 3360 bytes
|
||||
---- method_set 104 objects, 3328 bytes
|
||||
---- kind_constructor_comparison_schema_array 1 x 100 objects, 3232 bytes
|
||||
---- semver_range 31 objects, 3224 bytes
|
||||
---- inform_extension 19 objects, 3192 bytes
|
||||
---- definition 44 objects, 3168 bytes
|
||||
---- semver_range 29 objects, 3016 bytes
|
||||
---- either_or_property_data 62 objects, 2976 bytes
|
||||
---- target_vm 20 objects, 2880 bytes
|
||||
---- use_option 29 objects, 2552 bytes
|
||||
---- part_of_inference_data 79 objects, 2528 bytes
|
||||
---- parentage_inference_data 79 objects, 2528 bytes
|
||||
---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes
|
||||
---- part_of_inference_data 79 objects, 2528 bytes
|
||||
---- kind_constructor_instance_array 1 x 100 objects, 2432 bytes
|
||||
---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes
|
||||
---- equation_symbol 30 objects, 2400 bytes
|
||||
---- scene 1 object, 2096 bytes
|
||||
---- JSON_type 29 objects, 2088 bytes
|
||||
---- build_script 60 objects, 1920 bytes
|
||||
---- JSON_type 26 objects, 1872 bytes
|
||||
---- JSON_single_requirement 36 objects, 1728 bytes
|
||||
---- JSON_single_requirement 39 objects, 1872 bytes
|
||||
---- pronoun_usage 42 objects, 1680 bytes
|
||||
---- table_contribution_array 1 x 100 objects, 1632 bytes
|
||||
---- plugin 25 objects, 1600 bytes
|
||||
|
@ -168,20 +168,19 @@ Total memory consumption was 123597K = 121 MB
|
|||
---- invocation_options_array 1 x 100 objects, 1224 bytes
|
||||
---- direction_inference_data 30 objects, 1200 bytes
|
||||
---- tree_inventory_item 28 objects, 1120 bytes
|
||||
---- inbuild_requirement 27 objects, 1080 bytes
|
||||
---- JSON_requirement 33 objects, 1056 bytes
|
||||
---- runtime_kind_structure 13 objects, 1040 bytes
|
||||
---- quantifier 16 objects, 1024 bytes
|
||||
---- inbuild_requirement 25 objects, 1000 bytes
|
||||
---- submodule_identity 31 objects, 992 bytes
|
||||
---- named_rulebook_outcome 15 objects, 960 bytes
|
||||
---- JSON_requirement 30 objects, 960 bytes
|
||||
---- pipeline_stage 20 objects, 960 bytes
|
||||
---- named_rulebook_outcome 15 objects, 960 bytes
|
||||
---- control_structure_phrase 12 objects, 864 bytes
|
||||
---- cached_understanding 21 objects, 840 bytes
|
||||
---- phrase_option_array 1 x 100 objects, 824 bytes
|
||||
---- inbuild_search_result 20 objects, 800 bytes
|
||||
---- JSON_pair_requirement 24 objects, 768 bytes
|
||||
---- internal_test 15 objects, 720 bytes
|
||||
---- inbuild_search_result 18 objects, 720 bytes
|
||||
---- JSON_pair_requirement 21 objects, 672 bytes
|
||||
---- inform_language 6 objects, 672 bytes
|
||||
---- relation_guard 5 objects, 640 bytes
|
||||
---- implication 13 objects, 624 bytes
|
||||
---- code_generation 1 object, 576 bytes
|
||||
|
@ -189,6 +188,7 @@ Total memory consumption was 123597K = 121 MB
|
|||
---- rulebook_outcome 17 objects, 544 bytes
|
||||
---- small_word_set 11 objects, 528 bytes
|
||||
---- inform_kit 5 objects, 520 bytes
|
||||
---- inform_language 6 objects, 480 bytes
|
||||
---- equation 4 objects, 480 bytes
|
||||
---- i6_memory_setting 14 objects, 448 bytes
|
||||
---- inference_family 11 objects, 440 bytes
|
||||
|
@ -197,28 +197,28 @@ Total memory consumption was 123597K = 121 MB
|
|||
---- article_usage 8 objects, 384 bytes
|
||||
---- source_file 5 objects, 360 bytes
|
||||
---- inbuild_genre 7 objects, 336 bytes
|
||||
---- module_request 8 objects, 320 bytes
|
||||
---- grammatical_category 8 objects, 320 bytes
|
||||
---- cached_kind_declaration 8 objects, 320 bytes
|
||||
---- pronoun 8 objects, 320 bytes
|
||||
---- cached_kind_declaration 8 objects, 320 bytes
|
||||
---- grammatical_category 8 objects, 320 bytes
|
||||
---- module_request 8 objects, 320 bytes
|
||||
---- door_dir_notice 5 objects, 320 bytes
|
||||
---- inter_pipeline 1 object, 312 bytes
|
||||
---- tree_inventory 1 object, 312 bytes
|
||||
---- inter_pipeline 1 object, 312 bytes
|
||||
---- up_family 9 objects, 288 bytes
|
||||
---- build_step 4 objects, 288 bytes
|
||||
---- explicit_bp_data 5 objects, 280 bytes
|
||||
---- contents_entry 7 objects, 280 bytes
|
||||
---- door_to_notice 5 objects, 280 bytes
|
||||
---- compilation_unit 5 objects, 280 bytes
|
||||
---- explicit_bp_data 5 objects, 280 bytes
|
||||
---- verb_usage_tier 5 objects, 240 bytes
|
||||
---- adjective_meaning_family 7 objects, 224 bytes
|
||||
---- test_scenario 1 object, 216 bytes
|
||||
---- inform_project 1 object, 208 bytes
|
||||
---- release_instructions 1 object, 208 bytes
|
||||
---- build_skill 5 objects, 200 bytes
|
||||
---- code_generator 5 objects, 200 bytes
|
||||
---- plural_dictionary_entry 4 objects, 192 bytes
|
||||
---- inform_project 1 object, 192 bytes
|
||||
---- kit_dependency 4 objects, 192 bytes
|
||||
---- plural_dictionary_entry 4 objects, 192 bytes
|
||||
---- inference_subject_family 5 objects, 160 bytes
|
||||
---- inter_architecture 4 objects, 160 bytes
|
||||
---- imperative_defn_family 4 objects, 160 bytes
|
||||
|
@ -242,16 +242,16 @@ Total memory consumption was 123597K = 121 MB
|
|||
|
||||
100.0% was used for memory not allocated for objects:
|
||||
|
||||
57.7% text stream storage 73142388 bytes in 478493 claims
|
||||
4.1% dictionary storage 5248000 bytes in 7557 claims
|
||||
---- sorting 1448 bytes in 149 claims
|
||||
5.6% source text 7200000 bytes in 3 claims
|
||||
57.6% text stream storage 72611676 bytes in 478774 claims
|
||||
4.1% dictionary storage 5263360 bytes in 7587 claims
|
||||
---- sorting 1512 bytes in 159 claims
|
||||
5.7% source text 7200000 bytes in 3 claims
|
||||
8.5% source text details 10800000 bytes in 2 claims
|
||||
0.2% documentation fragments 262144 bytes in 1 claim
|
||||
---- linguistic stock array 81920 bytes in 2 claims
|
||||
---- small word set array 105600 bytes in 22 claims
|
||||
3.5% inter symbols storage 4520768 bytes in 27950 claims
|
||||
13.2% inter bytecode storage 16767568 bytes in 14 claims
|
||||
13.3% inter bytecode storage 16767568 bytes in 14 claims
|
||||
4.9% inter links storage 6222976 bytes in 11 claims
|
||||
0.1% inter tree location list storage 191232 bytes in 32 claims
|
||||
1.3% instance-of-kind counting 1700416 bytes in 1 claim
|
||||
|
@ -260,5 +260,5 @@ Total memory consumption was 123597K = 121 MB
|
|||
---- code generation workspace for objects 1336 bytes in 4 claims
|
||||
0.2% emitter array storage 280288 bytes in 1999 claims
|
||||
|
||||
-145.-9% was overhead - -184754048 bytes = -180423K = -176 MB
|
||||
-147.-1% was overhead - -185451240 bytes = -181104K = -176 MB
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<s-literal> hits 2100/23892 nti 23 constraint (none) extremes [1, infinity)
|
||||
<s-literal> hits 2100/23892 nti 21 constraint (none) extremes [1, infinity)
|
||||
English:
|
||||
(@1)<cardinal-number>=1
|
||||
(hits 171/171) (matched: '100') constraint CS = {r0} extremes [1, 1]
|
||||
(@1)minus (@2)<cardinal-number>=1
|
||||
(hits 0/1409) constraint DS = {23} extremes [2, 2]
|
||||
(hits 0/1515) constraint DS = {21} extremes [2, 2]
|
||||
(@1)<quoted-text>=1 (@2)( (@3)<response-letter>=2 (@4))
|
||||
(hits 274/733) (matched: '"[current item from the multiple object list]: [run paragraph on]" ( a )') constraint DS = {23} extremes [4, 4]
|
||||
(hits 274/765) (matched: '"[current item from the multiple object list]: [run paragraph on]" ( a )') constraint DS = {21} extremes [4, 4]
|
||||
(@1)<quoted-text>=1
|
||||
(hits 1566/5560) (matched: 'Represents geographical locations, both indoor
|
||||
and outdoor, which are not necessarily areas in a building. A player in one
|
||||
|
@ -14,12 +14,12 @@
|
|||
<s-literal-real-number>=1
|
||||
(hits 11/9935) (matched: 'plus infinity') constraint (none) extremes [1, infinity)
|
||||
(@1)<s-literal-truth-state>=1
|
||||
(hits 78/833) (matched: 'false') constraint CS = {17} extremes [1, 1]
|
||||
(hits 78/1307) (matched: 'false') constraint CS = {15} extremes [1, 1]
|
||||
<s-literal-list>=1
|
||||
(hits 0/3263) constraint DS = {19} extremes [2, infinity)
|
||||
(hits 0/3250) constraint DS = {17} extremes [2, infinity)
|
||||
(@1)unicode <s-unicode-character>=1
|
||||
(hits 0/3221) constraint DS = {23} extremes [2, infinity)
|
||||
(hits 0/3387) constraint DS = {21} extremes [2, infinity)
|
||||
<s-literal-time>=1
|
||||
(hits 0/3766) constraint DW = {20, 21, 22} extremes [2, 5]
|
||||
(hits 0/3710) constraint DW = {18, 19, 20} extremes [2, 5]
|
||||
<s-literal-unit-notation>=1
|
||||
(hits 0/9846) constraint (none) extremes [1, infinity)
|
||||
|
|
|
@ -1,33 +1,33 @@
|
|||
100.0% in inform7 run
|
||||
71.3% in compilation to Inter
|
||||
51.3% in //Sequence::undertake_queued_tasks//
|
||||
4.5% in //MajorNodes::pre_pass//
|
||||
3.3% in //MajorNodes::pass_1//
|
||||
1.7% in //ImperativeDefinitions::assess_all//
|
||||
1.7% in //RTPhrasebook::compile_entries//
|
||||
1.3% in //RTKindConstructors::compile//
|
||||
1.1% in //Sequence::lint_inter//
|
||||
0.5% in //MajorNodes::pass_2//
|
||||
0.5% in //World::stage_V//
|
||||
0.3% in //ImperativeDefinitions::compile_first_block//
|
||||
0.3% in //Sequence::undertake_queued_tasks//
|
||||
0.3% in //Sequence::undertake_queued_tasks//
|
||||
0.1% in //CompletionModule::compile//
|
||||
0.1% in //InferenceSubjects::emit_all//
|
||||
0.1% in //RTKindConstructors::compile_permissions//
|
||||
0.1% in //Task::make_built_in_kind_constructors//
|
||||
0.1% in //World::stages_II_and_III//
|
||||
2.7% not specifically accounted for
|
||||
26.0% in running Inter pipeline
|
||||
10.3% in step 14/15: generate inform6 -> auto.inf
|
||||
5.4% in step 5/15: load-binary-kits
|
||||
71.0% in compilation to Inter
|
||||
50.5% in //Sequence::undertake_queued_tasks//
|
||||
4.6% in //MajorNodes::pre_pass//
|
||||
3.4% in //MajorNodes::pass_1//
|
||||
2.0% in //RTPhrasebook::compile_entries//
|
||||
1.8% in //ImperativeDefinitions::assess_all//
|
||||
1.4% in //RTKindConstructors::compile//
|
||||
1.0% in //Sequence::lint_inter//
|
||||
0.6% in //MajorNodes::pass_2//
|
||||
0.6% in //Sequence::undertake_queued_tasks//
|
||||
0.6% in //World::stage_V//
|
||||
0.4% in //ImperativeDefinitions::compile_first_block//
|
||||
0.4% in //Sequence::undertake_queued_tasks//
|
||||
0.2% in //CompletionModule::compile//
|
||||
0.2% in //InferenceSubjects::emit_all//
|
||||
0.2% in //RTKindConstructors::compile_permissions//
|
||||
0.2% in //Task::make_built_in_kind_constructors//
|
||||
0.2% in //World::stages_II_and_III//
|
||||
2.6% not specifically accounted for
|
||||
26.1% in running Inter pipeline
|
||||
10.6% in step 14/15: generate inform6 -> auto.inf
|
||||
5.6% in step 5/15: load-binary-kits
|
||||
5.4% in step 6/15: make-synoptic-module
|
||||
1.5% in step 9/15: make-identifiers-unique
|
||||
0.3% in step 12/15: eliminate-redundant-operations
|
||||
0.3% in step 4/15: compile-splats
|
||||
0.3% in step 7/15: shorten-wiring
|
||||
0.3% in step 8/15: detect-indirect-calls
|
||||
0.1% in step 11/15: eliminate-redundant-labels
|
||||
1.3% not specifically accounted for
|
||||
2.3% in supervisor
|
||||
0.2% not specifically accounted for
|
||||
1.4% in step 9/15: make-identifiers-unique
|
||||
0.4% in step 12/15: eliminate-redundant-operations
|
||||
0.4% in step 4/15: compile-splats
|
||||
0.4% in step 7/15: shorten-wiring
|
||||
0.4% in step 8/15: detect-indirect-calls
|
||||
0.2% in step 11/15: eliminate-redundant-labels
|
||||
1.2% not specifically accounted for
|
||||
2.4% in supervisor
|
||||
0.5% not specifically accounted for
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
1 English
|
||||
2 English
|
||||
3 in English
|
||||
4 en
|
||||
5 Graham Nelson
|
17
inform7/Internal/Languages/English/language_metadata.json
Normal file
17
inform7/Internal/Languages/English/language_metadata.json
Normal file
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"is": {
|
||||
"type": "language",
|
||||
"title": "English"
|
||||
},
|
||||
"needs": [ {
|
||||
"need": {
|
||||
"type": "kit",
|
||||
"title": "EnglishLanguageKit"
|
||||
}
|
||||
} ],
|
||||
"language-details": {
|
||||
"translated-name": "English",
|
||||
"iso-639-1-code": "en",
|
||||
"translated-syntax-cue": "in English"
|
||||
}
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
1 French
|
||||
2 Français
|
||||
3 en français
|
||||
4 fr
|
||||
5 Nathanaël Marion
|
17
inform7/Internal/Languages/French/language_metadata.json
Normal file
17
inform7/Internal/Languages/French/language_metadata.json
Normal file
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"is": {
|
||||
"type": "language",
|
||||
"title": "French"
|
||||
},
|
||||
"needs": [ {
|
||||
"need": {
|
||||
"type": "kit",
|
||||
"title": "FrenchLanguageKit"
|
||||
}
|
||||
} ],
|
||||
"language-details": {
|
||||
"translated-name": "Français",
|
||||
"iso-639-1-code": "fr",
|
||||
"translated-syntax-cue": "en français"
|
||||
}
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
1 German
|
||||
2 Deutsch
|
||||
3 in deutscher Sprache
|
||||
4 de
|
||||
5 Team GerX
|
17
inform7/Internal/Languages/German/language_metadata.json
Normal file
17
inform7/Internal/Languages/German/language_metadata.json
Normal file
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"is": {
|
||||
"type": "language",
|
||||
"title": "German"
|
||||
},
|
||||
"needs": [ {
|
||||
"need": {
|
||||
"type": "kit",
|
||||
"title": "GermanLanguageKit"
|
||||
}
|
||||
} ],
|
||||
"language-details": {
|
||||
"translated-name": "Deutsch",
|
||||
"iso-639-1-code": "de",
|
||||
"translated-syntax-cue": "Geschrieben auf Deutsch"
|
||||
}
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
1 Italian
|
||||
2 Italiano
|
||||
3 in italiano
|
||||
4 it
|
||||
5 Massimo Stella
|
17
inform7/Internal/Languages/Italian/language_metadata.json
Normal file
17
inform7/Internal/Languages/Italian/language_metadata.json
Normal file
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"is": {
|
||||
"type": "language",
|
||||
"title": "Italian"
|
||||
},
|
||||
"needs": [ {
|
||||
"need": {
|
||||
"type": "kit",
|
||||
"title": "ItalianLanguageKit"
|
||||
}
|
||||
} ],
|
||||
"language-details": {
|
||||
"translated-name": "Italiano",
|
||||
"iso-639-1-code": "it",
|
||||
"translated-syntax-cue": "scritto in italiano"
|
||||
}
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
1 Spanish
|
||||
2 español
|
||||
3 en español
|
||||
4 es
|
||||
5 Sebastian Arg
|
17
inform7/Internal/Languages/Spanish/language_metadata.json
Normal file
17
inform7/Internal/Languages/Spanish/language_metadata.json
Normal file
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"is": {
|
||||
"type": "language",
|
||||
"title": "Spanish"
|
||||
},
|
||||
"needs": [ {
|
||||
"need": {
|
||||
"type": "kit",
|
||||
"title": "SpanishLanguageKit"
|
||||
}
|
||||
} ],
|
||||
"language-details": {
|
||||
"translated-name": "Español",
|
||||
"iso-639-1-code": "es",
|
||||
"translated-syntax-cue": "en español"
|
||||
}
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
1 Swedish
|
||||
2 svenska
|
||||
3 på svenska
|
||||
4 sv
|
||||
5 Felix Larsson
|
17
inform7/Internal/Languages/Swedish/language_metadata.json
Normal file
17
inform7/Internal/Languages/Swedish/language_metadata.json
Normal file
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"is": {
|
||||
"type": "language",
|
||||
"title": "Swedish"
|
||||
},
|
||||
"needs": [ {
|
||||
"need": {
|
||||
"type": "kit",
|
||||
"title": "SwedishLanguageKit"
|
||||
}
|
||||
} ],
|
||||
"language-details": {
|
||||
"translated-name": "Svenska",
|
||||
"iso-639-1-code": "sv",
|
||||
"translated-syntax-cue": "på svenska"
|
||||
}
|
||||
}
|
|
@ -18,6 +18,9 @@
|
|||
}
|
||||
|
||||
<language-metadata> ::= {
|
||||
"translated-name": string,
|
||||
"iso-639-1-code": string,
|
||||
?"translated-syntax-cue": string
|
||||
}
|
||||
|
||||
<resource-metadata> ::= {
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
"Test of a Problem" by Dr Evil
|
||||
|
||||
"This is a quote which never ends [though a substitution does]
|
||||
|
||||
|
|
|
@ -1,9 +1,5 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
I've now read your source text, which is 8 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
Problem__ PM_BadTitleSentence
|
||||
>--> You wrote '"The Gilmore Girls" s01e01' (source text, line 1): but the
|
||||
initial bibliographic sentence can only be a title in double-quotes,
|
||||
>--> The opening bibliographic sentence can only be a title in double-quotes,
|
||||
possibly followed with 'by' and the name of the author.
|
||||
Inform 7 has finished: 16 centiseconds used.
|
||||
Inform 7 v10.1.0 has started.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -6,11 +6,12 @@ To load, optimise and throw problem messages related to Preform syntax.
|
|||
At present we do this only when |L| is English, but the infrastructure is general.
|
||||
|
||||
=
|
||||
void CorePreform::load(inform_language *L) {
|
||||
int CorePreform::load(inform_language *L) {
|
||||
if (L == NULL) internal_error("can't load preform from null language");
|
||||
filename *F = Filenames::in(Languages::path_to_bundle(L), I"Syntax.preform");
|
||||
int nonterminals_declared = LoadPreform::load(F, L);
|
||||
LOG("%d Preform nonterminals read from %f\n", nonterminals_declared, F);
|
||||
return nonterminals_declared;
|
||||
}
|
||||
|
||||
@h Converting Preform errors to problems.
|
||||
|
|
|
@ -261,10 +261,12 @@ void SourceProblems::issue_problems_arising(inbuild_copy *C) {
|
|||
"has an 'ends here' with nothing having begun");
|
||||
break;
|
||||
case BadTitleSentence_SYNERROR:
|
||||
current_sentence = CE->details_node;
|
||||
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_BadTitleSentence),
|
||||
"the initial bibliographic sentence can only be a title in double-quotes",
|
||||
"possibly followed with 'by' and the name of the author.");
|
||||
current_sentence = NULL;
|
||||
StandardProblems::unlocated_problem(Task::syntax_tree(),
|
||||
_p_(PM_BadTitleSentence),
|
||||
"The opening bibliographic sentence can only be a title in "
|
||||
"double-quotes, possibly followed with 'by' and the name of "
|
||||
"the author.");
|
||||
break;
|
||||
case UnknownLanguageElement_SYNERROR:
|
||||
current_sentence = CE->details_node;
|
||||
|
@ -405,6 +407,16 @@ void SourceProblems::issue_problems_arising(inbuild_copy *C) {
|
|||
"was %4.)");
|
||||
Problems::issue_problem_end();
|
||||
break;
|
||||
case UnavailableLOS_SYNERROR:
|
||||
current_sentence = NULL;
|
||||
Problems::quote_stream(1, CE->details);
|
||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(...));
|
||||
Problems::issue_problem_segment(
|
||||
"The project says that its syntax is written in a language "
|
||||
"other than English (specifically, %1), but the language bundle "
|
||||
"for that language does not provide a file of Preform definitions.");
|
||||
Problems::issue_problem_end();
|
||||
break;
|
||||
default:
|
||||
internal_error("unknown syntax error");
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ comprehensive list of what is there.)
|
|||
@<Establish resources offered by WorldModelKit@>;
|
||||
@<Establish resources offered by CommandParserKit@>;
|
||||
@<Establish resources offered by either WorldModelKit or BasicInformExtrasKit@>;
|
||||
@<Establish resources offered by either EnglishLanguageKit@>;
|
||||
@<Establish resources offered by EnglishLanguageKit@>;
|
||||
|
||||
@h Offered by BasicInformKit.
|
||||
|
||||
|
@ -541,5 +541,5 @@ comprehensive list of what is there.)
|
|||
|
||||
@e THEN1__WD_HL
|
||||
|
||||
@<Establish resources offered by either EnglishLanguageKit@> =
|
||||
@<Establish resources offered by EnglishLanguageKit@> =
|
||||
KIT_PROVIDED(THEN1__WD_HL, I"THEN1__WD")
|
||||
|
|
|
@ -752,6 +752,7 @@ forcetransferextensions:
|
|||
{define: transfer-languages}
|
||||
mkdir -p "$(INTERNAL)/Languages"
|
||||
cp -R -f $(INFORM7WEB)/Internal/Languages $(INTERNAL)/Languages/..
|
||||
rm -f $(INTERNAL)/Languages/*/about.txt
|
||||
{end-define}
|
||||
|
||||
.PHONY: forcetransferlanguages
|
||||
|
@ -835,7 +836,7 @@ $(INTERNALEXEMPLUM): \
|
|||
$(INFORM7WEB)/Internal/Extensions/Eric\ Eve/[A-Za-z]* \
|
||||
$(INFORM7WEB)/Internal/Extensions/Emily\ Short/[A-Za-z]* \
|
||||
$(INFORM7WEB)/Internal/Extensions/Graham\ Nelson/[A-Za-z]* \
|
||||
$(INFORM7WEB)/Internal/Languages/*/about.txt \
|
||||
$(INFORM7WEB)/Internal/Languages/*/*.* \
|
||||
$(INFORM7WEB)/Internal/Templates/*/*.* \
|
||||
$(INFORM7WEB)/Internal/HTML/[A-Za-z]*.* \
|
||||
{repeat with: INTERPRETER in: {TEMPLATENAMES}}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
Size of lexicon: 3102 excerpt meanings
|
||||
Stored among 840 words out of total vocabulary of 10569
|
||||
Stored among 840 words out of total vocabulary of 10547
|
||||
710 words have a start list: longest belongs to report (with 293 meanings)
|
||||
15 words have an end list: longest belongs to case (with 6 meanings)
|
||||
29 words have a middle list: longest belongs to to (with 4 meanings)
|
||||
|
|
|
@ -512,10 +512,6 @@ sentences and options-file sentences may have been read already.)
|
|||
Node::set_type(new, sfsm->nt); return;
|
||||
} else {
|
||||
Node::set_type(new, sfsm->nt);
|
||||
#ifdef SUPERVISOR_MODULE
|
||||
if (sfsm->nt == BIBLIOGRAPHIC_NT)
|
||||
BiblioSentence::notify(sfsm->project_ref, new);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,7 +14,9 @@ NATURAL_LANGUAGE_WORDS_TYPE *primary_Preform_language = NULL;
|
|||
|
||||
int LoadPreform::load(filename *F, NATURAL_LANGUAGE_WORDS_TYPE *L) {
|
||||
primary_Preform_language = L;
|
||||
return LoadPreform::parse(LoadPreform::feed_from_Preform_file(F), L);
|
||||
wording W = LoadPreform::feed_from_Preform_file(F);
|
||||
if (Wordings::empty(W)) return 0;
|
||||
return LoadPreform::parse(W, L);
|
||||
}
|
||||
|
||||
@ We simply feed the lines one at a time. Preform is parsed with the same
|
||||
|
@ -28,7 +30,7 @@ wording LoadPreform::feed_from_Preform_file(filename *F) {
|
|||
feed_t id = Feeds::begin();
|
||||
if (TextFiles::read(F, FALSE,
|
||||
NULL, FALSE, LoadPreform::load_helper, NULL, NULL) == FALSE)
|
||||
internal_error("Unable to open Preform definition");
|
||||
return EMPTY_WORDING;
|
||||
return Feeds::end(id);
|
||||
}
|
||||
|
||||
|
|
|
@ -14,6 +14,21 @@ notably the MacOS app, which is being modernised to support Dark Mode.
|
|||
|
||||
## News items
|
||||
|
||||
### Language metadata respecified as JSON (23 June 2022)
|
||||
|
||||
As has been noticed already (see e.g. Jira bug I7-2155), the new Inbuild has
|
||||
been fairly sketchy in its handling of language bundles, and of using Inform
|
||||
to make non-English IF. In particular, language kits such as FrenchLanguageKit
|
||||
(if provided) were not being loaded automatically and instead required -kit
|
||||
to be used at the command line, or with a settings file; and even then,
|
||||
EnglishLanguageKit was being loaded as well, causing definition clashes.
|
||||
|
||||
This should all now be resolved.
|
||||
|
||||
Language bundles have now been redesigned, and are documented in the Inbuild
|
||||
manual, which has been rewritten today: see [A Guide to Language Bundles](https://ganelson.github.io/inform/inbuild/M-agtlb.html).
|
||||
Like kits, language bundles are adopting the new JSON metadata format.
|
||||
|
||||
### Change of testing UUID (22 June 2022)
|
||||
|
||||
A change to the batch-testing tool Intest means that the UUID used for Inform
|
||||
|
|
Loading…
Reference in a new issue