1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-06-26 04:00:43 +03:00

Tidier Preform grammar

This commit is contained in:
Graham Nelson 2020-05-07 23:01:32 +01:00
parent 84c478fa12
commit 71f1a4839f
11 changed files with 266 additions and 207 deletions

View file

@ -0,0 +1,39 @@
/* The following correspond to the Inweb colours !definition, ..., !comment: */
span.Preform-definition-syntax { color: #444444; }
span.Preform-function-syntax { color: #C00000; }
span.Preform-identifier-syntax { color: #4040ff; }
span.Preform-element-syntax { color: #40407f; }
span.Preform-reserved-syntax { color: #600000; }
span.Preform-string-syntax { color: #408040; }
span.Preform-character-syntax { color: #204020; }
span.Preform-constant-syntax { color: #804020; }
span.Preform-plain-syntax { color: #000000; }
span.Preform-extract-syntax { color: #444444; }
span.Preform-comment-syntax { color: #404040; font-style:italic; }
/* This is used for the "define" or "enum" keyword on Inweb-defined constants: */
span.Preform-definition-keyword { color:#801010; font-weight:bold; }
/* These are for the angle-bracketed paragraph names: */
span.Preform-named-paragraph, span.Preform-named-paragraph-defn { color: #000000; font-size: 90%; }
span.Preform-named-paragraph-number { color: #000000; font-size: 70%; font-style:italic; }
span.Preform-named-paragraph-container {
background: #ececf8; border: 1px solid #888888;
}
a.named-paragraph-link:link, a.named-paragraph-link:visited {
text-decoration: none;
}
a.named-paragraph-link:active, a.named-paragraph-link:hover {
background: #c8c8e8;
}
/* This is the box into which multi-line stretches of code are put: */
pre.Preform-displayed-code {
background: #e8f8e8;
border: 1px solid #cccccc;
}

View file

@ -21,6 +21,7 @@ function togglePopup(material_id) {
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Preform-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
@ -455,24 +456,21 @@ then its sentences will go to the extension's own tree.
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-es.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_2_1"></a><b>&#167;6.2.1. </b>If an extension file contains the special text (outside literal mode) of
<span class="extract"><span class="extract-syntax">---- Documentation ----</span></span> then this is taken as the end of the Inform source,
and the beginning of a snippet of documentation about the extension; text from
that point on is saved until later, but not broken into sentences for the
parse tree, and it is therefore invisible to the rest of Inform. If this
division line is not present then the extension contains only body source
and no documentation.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> ---- Documentation ----</span>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;extension-body&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">----</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">documentation</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">----</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> TRUE</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> FALSE</span>
</pre>
<p class="commentary">then this is taken as the end of the Inform source, and the beginning of a
snippet of documentation about the extension; text from that point on is
saved until later, but not broken into sentences for the parse tree, and it
is therefore invisible to the rest of Inform. If this division line is not
present then the extension contains only body source and no documentation.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">body</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> *** ---- </span><span class="identifier-syntax">documentation</span><span class="plain-syntax"> ---- ... | ==&gt; </span><span class="identifier-syntax">TRUE</span>
<span class="plain-syntax"> ... ==&gt; </span><span class="identifier-syntax">FALSE</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6_2_2"></a><b>&#167;6.2.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Break the extension's text into body and documentation</span><span class="named-paragraph-number">6.2.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_2_2"></a><b>&#167;6.2.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Break the extension's text into body and documentation</span><span class="named-paragraph-number">6.2.2</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">

View file

@ -21,6 +21,7 @@ function togglePopup(material_id) {
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Preform-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
@ -192,50 +193,54 @@ overlapping with this, and they need to match.
<span class="definition-keyword">define</span> <span class="constant-syntax">SAY_SIGF</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">NOW_SIGF</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">control</span><span class="plain-syntax">-</span><span class="identifier-syntax">structure</span><span class="plain-syntax">-</span><span class="identifier-syntax">phrase</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ... </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">begin</span><span class="plain-syntax"> | ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; *</span><span class="identifier-syntax">XP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">switch_CSP</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ... </span><span class="identifier-syntax">is</span><span class="plain-syntax"> | ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; *</span><span class="identifier-syntax">XP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">switch_CSP</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax">/</span><span class="identifier-syntax">unless</span><span class="plain-syntax"> ... | ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; *</span><span class="identifier-syntax">XP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">if_CSP</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">repeat</span><span class="plain-syntax"> ... | ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; *</span><span class="identifier-syntax">XP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">repeat_CSP</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ... | ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; *</span><span class="identifier-syntax">XP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">while_CSP</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax">/</span><span class="identifier-syntax">otherwise</span><span class="plain-syntax"> | ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; *</span><span class="identifier-syntax">XP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">otherwise_CSP</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax">/</span><span class="identifier-syntax">otherwise</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax">/</span><span class="identifier-syntax">unless</span><span class="plain-syntax"> ... | ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; *</span><span class="identifier-syntax">XP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">otherwise_if_CSP</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax">/</span><span class="identifier-syntax">otherwise</span><span class="plain-syntax"> ... | ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; *</span><span class="identifier-syntax">XP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">abbreviated_otherwise_CSP</span>
<span class="plain-syntax"> -- </span><span class="identifier-syntax">otherwise</span><span class="plain-syntax"> | ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; *</span><span class="identifier-syntax">XP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">default_case_CSP</span>
<span class="plain-syntax"> -- ... ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; *</span><span class="identifier-syntax">XP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">case_CSP</span>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;control-structure-phrase&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">if</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">begin</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; *XP = switch_CSP</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">if</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; *XP = switch_CSP</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">if/unless</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; *XP = if_CSP</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">repeat</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; *XP = repeat_CSP</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">while</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; *XP = while_CSP</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">else/otherwise</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; *XP = otherwise_CSP</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">else/otherwise</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">if/unless</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; *XP = otherwise_if_CSP</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">else/otherwise</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; *XP = abbreviated_otherwise_CSP</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">--</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">otherwise</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; *XP = default_case_CSP</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">--</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; *XP = case_CSP</span>
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">end</span><span class="plain-syntax">-</span><span class="identifier-syntax">control</span><span class="plain-syntax">-</span><span class="identifier-syntax">structure</span><span class="plain-syntax">-</span><span class="identifier-syntax">phrase</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">end</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax">/</span><span class="identifier-syntax">unless</span><span class="plain-syntax"> | ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; *</span><span class="identifier-syntax">XP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">if_CSP</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">end</span><span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> | ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; *</span><span class="identifier-syntax">XP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">while_CSP</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">end</span><span class="plain-syntax"> </span><span class="identifier-syntax">repeat</span><span class="plain-syntax"> ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; *</span><span class="identifier-syntax">XP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">repeat_CSP</span>
<span class="Preform-function-syntax">&lt;end-control-structure-phrase&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">end</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">if/unless</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; *XP = if_CSP</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">end</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">while</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; *XP = while_CSP</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">end</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">repeat</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; *XP = repeat_CSP</span>
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">other</span><span class="plain-syntax">-</span><span class="identifier-syntax">significant</span><span class="plain-syntax">-</span><span class="identifier-syntax">phrase</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> ... | ==&gt; </span><span class="constant-syntax">SAY_SIGF</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">now</span><span class="plain-syntax"> ... ==&gt; </span><span class="constant-syntax">NOW_SIGF</span>
<span class="Preform-function-syntax">&lt;other-significant-phrase&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">say</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> SAY_SIGF</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">now</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> NOW_SIGF</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP7"></a><b>&#167;7. </b>This is used to see if an "if" is being used with the comma notation:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">phrase</span><span class="plain-syntax">-</span><span class="identifier-syntax">with</span><span class="plain-syntax">-</span><span class="identifier-syntax">comma</span><span class="plain-syntax">-</span><span class="identifier-syntax">notation</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> ...... , ......</span>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;phrase-with-comma-notation&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">......</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">,</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">......</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP8"></a><b>&#167;8. </b>This is used to see if an "if" is being used with the comma notation:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">instead</span><span class="plain-syntax">-</span><span class="identifier-syntax">keyword</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">instead</span><span class="plain-syntax"> ... |</span>
<span class="plain-syntax"> ... </span><span class="identifier-syntax">instead</span>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;instead-keyword&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">instead</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">instead</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP9"></a><b>&#167;9. </b>Finally, this is used to see if a control structure opens a block:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">phrase</span><span class="plain-syntax">-</span><span class="identifier-syntax">beginning</span><span class="plain-syntax">-</span><span class="identifier-syntax">block</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> ... </span><span class="identifier-syntax">begin</span>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;phrase-beginning-block&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">begin</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP10"></a><b>&#167;10. </b>And some miscellaneous provisions:
</p>

View file

@ -35,6 +35,7 @@ function togglePopup(material_id) {
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Preform-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
@ -404,41 +405,42 @@ the source text it governs. For example,
allowed; they should probably be withdrawn.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">&lt;</span><span class="reserved-syntax">heading</span><span class="plain-syntax">-</span><span class="identifier-syntax">qualifier</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> ... ( &lt;</span><span class="identifier-syntax">bracketed</span><span class="plain-syntax">-</span><span class="reserved-syntax">heading</span><span class="plain-syntax">-</span><span class="identifier-syntax">qualifier</span><span class="plain-syntax">&gt; ) | ==&gt; </span><span class="identifier-syntax">R</span><span class="plain-syntax">[1]</span>
<span class="plain-syntax"> ... </span><span class="identifier-syntax">not</span><span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">release</span><span class="plain-syntax"> | ==&gt; </span><span class="constant-syntax">NOT_FOR_RELEASE_HQ</span>
<span class="plain-syntax"> ... </span><span class="reserved-syntax">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">release</span><span class="plain-syntax"> </span><span class="identifier-syntax">only</span><span class="plain-syntax"> | ==&gt; </span><span class="constant-syntax">FOR_RELEASE_ONLY_HQ</span>
<span class="plain-syntax"> ... </span><span class="identifier-syntax">unindexed</span><span class="plain-syntax"> ==&gt; </span><span class="constant-syntax">UNINDEXED_HQ</span>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;heading-qualifier&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;bracketed-heading-qualifier&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> R[1]</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">not</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">for</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">release</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> NOT_FOR_RELEASE_HQ</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">for</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">release</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">only</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> FOR_RELEASE_ONLY_HQ</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">unindexed</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> UNINDEXED_HQ</span>
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">bracketed</span><span class="plain-syntax">-</span><span class="reserved-syntax">heading</span><span class="plain-syntax">-</span><span class="identifier-syntax">qualifier</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">not</span><span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">release</span><span class="plain-syntax"> | ==&gt; </span><span class="constant-syntax">NOT_FOR_RELEASE_HQ</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">release</span><span class="plain-syntax"> </span><span class="identifier-syntax">only</span><span class="plain-syntax"> | ==&gt; </span><span class="constant-syntax">FOR_RELEASE_ONLY_HQ</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">unindexed</span><span class="plain-syntax"> | ==&gt; </span><span class="constant-syntax">UNINDEXED_HQ</span>
<span class="plain-syntax"> &lt;</span><span class="identifier-syntax">platform</span><span class="plain-syntax">-</span><span class="identifier-syntax">qualifier</span><span class="plain-syntax">&gt; | ==&gt; </span><span class="identifier-syntax">R</span><span class="plain-syntax">[1]</span>
<span class="plain-syntax"> &lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">qualifier</span><span class="plain-syntax">&gt; ==&gt; </span><span class="identifier-syntax">R</span><span class="plain-syntax">[1]</span>
<span class="Preform-function-syntax">&lt;bracketed-heading-qualifier&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">not</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">for</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">release</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> NOT_FOR_RELEASE_HQ</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">for</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">release</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">only</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> FOR_RELEASE_ONLY_HQ</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">unindexed</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> UNINDEXED_HQ</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;platform-qualifier&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> R[1]</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;extension-qualifier&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> R[1]</span>
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">platform</span><span class="plain-syntax">-</span><span class="identifier-syntax">qualifier</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> &lt;</span><span class="identifier-syntax">platform</span><span class="plain-syntax">-</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">&gt; </span><span class="identifier-syntax">only</span><span class="plain-syntax"> | ==&gt; (</span><span class="identifier-syntax">R</span><span class="plain-syntax">[1])?</span><span class="identifier-syntax">PLATFORM_MET_HQ:PLATFORM_UNMET_HQ</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">not</span><span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> &lt;</span><span class="identifier-syntax">platform</span><span class="plain-syntax">-</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">&gt; ==&gt; (</span><span class="identifier-syntax">R</span><span class="plain-syntax">[1])?</span><span class="identifier-syntax">PLATFORM_UNMET_HQ:PLATFORM_MET_HQ</span>
<span class="Preform-function-syntax">&lt;platform-qualifier&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">for</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;platform-identifier&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">only</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> (R[1])?PLATFORM_MET_HQ:PLATFORM_UNMET_HQ</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">not</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">for</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;platform-identifier&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> (R[1])?PLATFORM_UNMET_HQ:PLATFORM_MET_HQ</span>
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">platform</span><span class="plain-syntax">-</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> &lt;</span><span class="identifier-syntax">language</span><span class="plain-syntax">-</span><span class="identifier-syntax">element</span><span class="plain-syntax">&gt; </span><span class="identifier-syntax">language</span><span class="plain-syntax"> </span><span class="identifier-syntax">element</span><span class="plain-syntax"> | ==&gt; </span><span class="identifier-syntax">R</span><span class="plain-syntax">[1]</span>
<span class="plain-syntax"> ...... </span><span class="identifier-syntax">language</span><span class="plain-syntax"> </span><span class="identifier-syntax">element</span><span class="plain-syntax"> | ==&gt; </span><span class="named-paragraph-container code-font"><a href="6-hdn.html#SP12_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_UnknownLanguageElement problem</span><span class="named-paragraph-number">12.1</span></a></span>
<span class="plain-syntax"> &lt;</span><span class="identifier-syntax">current</span><span class="plain-syntax">-</span><span class="identifier-syntax">virtual</span><span class="plain-syntax">-</span><span class="identifier-syntax">machine</span><span class="plain-syntax">&gt; | ==&gt; </span><span class="identifier-syntax">R</span><span class="plain-syntax">[1]</span>
<span class="plain-syntax"> ...... ==&gt; </span><span class="named-paragraph-container code-font"><a href="6-hdn.html#SP12_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_UnknownVirtualMachine problem</span><span class="named-paragraph-number">12.2</span></a></span>
<span class="Preform-function-syntax">&lt;platform-identifier&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;language-element&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">language</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">element</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> R[1]</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">......</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">language</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">element</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-hdn.html#SP12_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_UnknownLanguageElement problem</span><span class="named-paragraph-number">12.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;current-virtual-machine&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> R[1]</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">......</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-hdn.html#SP12_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_UnknownVirtualMachine problem</span><span class="named-paragraph-number">12.2</span></a></span>
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">qualifier</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">use</span><span class="plain-syntax"> </span><span class="identifier-syntax">with</span><span class="plain-syntax"> &lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">&gt; | ==&gt; </span><span class="constant-syntax">USE_WITH_HQ</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">use</span><span class="plain-syntax"> </span><span class="identifier-syntax">without</span><span class="plain-syntax"> &lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">&gt; | ==&gt; </span><span class="constant-syntax">USE_WITHOUT_HQ</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">not</span><span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">use</span><span class="plain-syntax"> </span><span class="identifier-syntax">with</span><span class="plain-syntax"> &lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">&gt; | ==&gt; </span><span class="constant-syntax">USE_WITHOUT_HQ</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">place</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> (&lt;</span><span class="identifier-syntax">quoted</span><span class="plain-syntax">-</span><span class="identifier-syntax">text</span><span class="plain-syntax">&gt;) </span><span class="identifier-syntax">in</span><span class="plain-syntax"> &lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">&gt; | ==&gt; </span><span class="constant-syntax">IN_PLACE_OF_HQ</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">place</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> ...... </span><span class="identifier-syntax">in</span><span class="plain-syntax"> &lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">&gt; ==&gt; </span><span class="constant-syntax">IN_PLACE_OF_HQ</span>
<span class="Preform-function-syntax">&lt;extension-qualifier&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">for</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">use</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">with</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;extension-identifier&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> USE_WITH_HQ</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">for</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">use</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">without</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;extension-identifier&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> USE_WITHOUT_HQ</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">not</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">for</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">use</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">with</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;extension-identifier&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> USE_WITHOUT_HQ</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">in</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">place</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">of</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;quoted-text&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">in</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;extension-identifier&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> IN_PLACE_OF_HQ</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">in</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">place</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">of</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">......</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">in</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;extension-identifier&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> IN_PLACE_OF_HQ</span>
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> ...... </span><span class="identifier-syntax">by</span><span class="plain-syntax"> ...... ==&gt; </span><span class="named-paragraph-container code-font"><a href="6-hdn.html#SP12_3" class="named-paragraph-link"><span class="named-paragraph">Set for-use-with extension identifier</span><span class="named-paragraph-number">12.3</span></a></span>
<span class="Preform-function-syntax">&lt;extension-identifier&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">......</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">by</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">......</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-hdn.html#SP12_3" class="named-paragraph-link"><span class="named-paragraph">Set for-use-with extension identifier</span><span class="named-paragraph-number">12.3</span></a></span>
</pre>
<p class="commentary firstcommentary"><a id="SP12_1"></a><b>&#167;12.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_UnknownLanguageElement problem</span><span class="named-paragraph-number">12.1</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP12_1"></a><b>&#167;12.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_UnknownLanguageElement problem</span><span class="named-paragraph-number">12.1</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -480,18 +482,19 @@ the result <span class="extract"><span class="extract-syntax">TRUE</span></span>
otherwise.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">current</span><span class="plain-syntax">-</span><span class="identifier-syntax">virtual</span><span class="plain-syntax">-</span><span class="identifier-syntax">machine</span><span class="plain-syntax">&gt; </span><span class="identifier-syntax">internal</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (&lt;</span><span class="identifier-syntax">virtual</span><span class="plain-syntax">-</span><span class="identifier-syntax">machine</span><span class="plain-syntax">&gt;(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">compatibility_specification</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vms</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">compatibility_specification</span><span class="plain-syntax"> *) &lt;&lt;</span><span class="identifier-syntax">rp</span><span class="plain-syntax">&gt;&gt;;</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Compatibility::with</span><span class="plain-syntax">(</span><span class="identifier-syntax">vms</span><span class="plain-syntax">, </span><a href="1-ic.html#SP9" class="function-link"><span class="function-syntax">Supervisor::current_vm</span></a><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><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">X</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">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;current-virtual-machine&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">internal</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (&lt;</span><span class="Preform-identifier-syntax">virtual</span><span class="Preform-plain-syntax">-</span><span class="Preform-identifier-syntax">machine</span><span class="Preform-plain-syntax">&gt;(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">)) {</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">compatibility_specification</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">vms</span><span class="Preform-plain-syntax"> = (</span><span class="Preform-identifier-syntax">compatibility_specification</span><span class="Preform-plain-syntax"> *) &lt;&lt;</span><span class="Preform-identifier-syntax">rp</span><span class="Preform-plain-syntax">&gt;&gt;;</span>
<span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">X</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Compatibility::with</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vms</span><span class="Preform-plain-syntax">, </span><a href="1-ic.html#SP9" class="function-link"><span class="Preform-function-syntax">Supervisor::current_vm</span></a><span class="Preform-plain-syntax">());</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> } </span><span class="Preform-reserved-syntax">else</span><span class="Preform-plain-syntax"> {</span>
<span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">X</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> }</span>
<span class="Preform-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP14"></a><b>&#167;14. The heading tree. </b>Until <a href="6-hdn.html#SP14" class="internal">Headings::assemble_tree</a> runs, the <a href="6-hdn.html#SP6" class="internal">heading</a> nodes listed as belonging
to the heading tree are not in fact formed up into a tree structure.
</p>

View file

@ -21,6 +21,7 @@ function togglePopup(material_id) {
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Preform-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
@ -151,25 +152,26 @@ read twice.
word "Include", which might e.g. be "Locksmith by Emily Short".
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">title</span><span class="plain-syntax">-</span><span class="identifier-syntax">and</span><span class="plain-syntax">-</span><span class="identifier-syntax">version</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">version</span><span class="plain-syntax"> &lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">version</span><span class="plain-syntax">&gt; </span><span class="identifier-syntax">of</span><span class="plain-syntax"> &lt;</span><span class="identifier-syntax">definite</span><span class="plain-syntax">-</span><span class="identifier-syntax">article</span><span class="plain-syntax">&gt; &lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">unversioned</span><span class="plain-syntax">&gt; | ==&gt; </span><span class="identifier-syntax">R</span><span class="plain-syntax">[1]</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">version</span><span class="plain-syntax"> &lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">version</span><span class="plain-syntax">&gt; </span><span class="identifier-syntax">of</span><span class="plain-syntax"> &lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">unversioned</span><span class="plain-syntax">&gt; | ==&gt; </span><span class="identifier-syntax">R</span><span class="plain-syntax">[1]</span>
<span class="plain-syntax"> &lt;</span><span class="identifier-syntax">definite</span><span class="plain-syntax">-</span><span class="identifier-syntax">article</span><span class="plain-syntax">&gt; &lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">unversioned</span><span class="plain-syntax">&gt; | ==&gt; -1</span>
<span class="plain-syntax"> &lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">unversioned</span><span class="plain-syntax">&gt; ==&gt; -1</span>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;extension-title-and-version&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">version</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;extension-version&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">of</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;definite-article&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;extension-unversioned&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> R[1]</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">version</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;extension-version&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">of</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;extension-unversioned&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> R[1]</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;definite-article&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;extension-unversioned&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> -1</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;extension-unversioned&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> -1</span>
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">unversioned</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> &lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">unversioned</span><span class="plain-syntax">-</span><span class="identifier-syntax">inner</span><span class="plain-syntax">&gt; ( ... ) | ==&gt; </span><span class="constant-syntax">0</span>
<span class="plain-syntax"> &lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">unversioned</span><span class="plain-syntax">-</span><span class="identifier-syntax">inner</span><span class="plain-syntax">&gt; ==&gt; </span><span class="constant-syntax">0</span>
<span class="Preform-function-syntax">&lt;extension-unversioned&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;extension-unversioned-inner&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;extension-unversioned-inner&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0</span>
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">unversioned</span><span class="plain-syntax">-</span><span class="identifier-syntax">inner</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> &lt;</span><span class="identifier-syntax">quoted</span><span class="plain-syntax">-</span><span class="identifier-syntax">text</span><span class="plain-syntax">&gt; *** | ==&gt; </span><span class="named-paragraph-container code-font"><a href="6-inc.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_IncludeExtQuoted problem</span><span class="named-paragraph-number">2.1</span></a></span>
<span class="plain-syntax"> ... ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; &lt;&lt;</span><span class="identifier-syntax">t1</span><span class="plain-syntax">&gt;&gt; = </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">); &lt;&lt;</span><span class="identifier-syntax">t2</span><span class="plain-syntax">&gt;&gt; = </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="Preform-function-syntax">&lt;extension-unversioned-inner&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;quoted-text&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-inc.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_IncludeExtQuoted problem</span><span class="named-paragraph-number">2.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; &lt;&lt;t1&gt;&gt; = Wordings::first_wn(W); &lt;&lt;t2&gt;&gt; = Wordings::last_wn(W)</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1"></a><b>&#167;2.1. </b>Quite a popular mistake, this:
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_IncludeExtQuoted problem</span><span class="named-paragraph-number">2.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_IncludeExtQuoted problem</span><span class="named-paragraph-number">2.1</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -183,12 +185,13 @@ word "Include", which might e.g. be "Locksmith by Emily Short".
"12/110410", but at this stage it accepts anything: actual parsing comes later.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">version</span><span class="plain-syntax">&gt; </span><span class="identifier-syntax">internal</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">X</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;extension-version&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">internal</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{</span>
<span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">X</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Wordings::first_wn</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP4"></a><b>&#167;4. </b></p>
<pre class="displayed-code all-displayed-code code-font">
@ -395,12 +398,13 @@ use an extension which is marked as not working on the current VM.
<p>Version 3 of Pantomime Sausages by Mr Punch begins here.</p>
</blockquote>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">begins</span><span class="plain-syntax">-</span><span class="identifier-syntax">here</span><span class="plain-syntax">-</span><span class="identifier-syntax">sentence</span><span class="plain-syntax">-</span><span class="identifier-syntax">subject</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> &lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">title</span><span class="plain-syntax">-</span><span class="identifier-syntax">and</span><span class="plain-syntax">-</span><span class="identifier-syntax">version</span><span class="plain-syntax">&gt; </span><span class="identifier-syntax">by</span><span class="plain-syntax"> ... |</span>
<span class="plain-syntax"> ... ==&gt; </span><span class="named-paragraph-container code-font"><a href="6-inc.html#SP8_1" class="named-paragraph-link"><span class="named-paragraph">Issue problem</span><span class="named-paragraph-number">8.1</span></a></span>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;begins-here-sentence-subject&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;extension-title-and-version&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">by</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-inc.html#SP8_1" class="named-paragraph-link"><span class="named-paragraph">Issue problem</span><span class="named-paragraph-number">8.1</span></a></span>
</pre>
<p class="commentary firstcommentary"><a id="SP8_1"></a><b>&#167;8.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue problem</span><span class="named-paragraph-number">8.1</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_1"></a><b>&#167;8.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue problem</span><span class="named-paragraph-number">8.1</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -424,25 +428,26 @@ side-effects: we merely verify that the name matches the one quoted in
the "begins here".
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">the</span><span class="plain-syntax">-</span><span class="identifier-syntax">prefix</span><span class="plain-syntax">-</span><span class="reserved-syntax">for</span><span class="plain-syntax">-</span><span class="identifier-syntax">extensions</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> ...</span>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;the-prefix-for-extensions&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Inclusions::check_ends_here</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">Inclusions::check_ends_here</span></span>:<br/>Source Text - <a href="6-st.html#SP12">&#167;12</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PN</span><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">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">inclusions_errors_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inclusions_errors_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">;</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">ParseTree::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">PN</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (&lt;</span><span class="identifier-syntax">the</span><span class="plain-syntax">-</span><span class="identifier-syntax">prefix</span><span class="plain-syntax">-</span><span class="reserved-syntax">for</span><span class="plain-syntax">-</span><span class="identifier-syntax">extensions</span><span class="plain-syntax">&gt;(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(&lt;</span><span class="identifier-syntax">the</span><span class="plain-syntax">-</span><span class="identifier-syntax">prefix</span><span class="plain-syntax">-</span><span class="reserved-syntax">for</span><span class="plain-syntax">-</span><span class="identifier-syntax">extensions</span><span class="plain-syntax">&gt;, </span><span class="constant-syntax">1</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">T</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Feeds::feed_stream</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_copy</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">edition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">work</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">title</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::match</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</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</span></a><span class="plain-syntax">(</span><span class="constant-syntax">SYNTAX_CE</span><span class="plain-syntax">, </span><span class="constant-syntax">ExtMisidentifiedEnds_SYNERROR</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ce.html#SP3" class="function-link"><span class="function-syntax">CopyErrors::supply_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">CE</span><span class="plain-syntax">, </span><span class="identifier-syntax">PN</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ce.html#SP3" class="function-link"><span class="function-syntax">CopyErrors::supply_wording</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">CE</span><span class="plain-syntax">, </span><span class="identifier-syntax">ParseTree::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">PN</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">inclusions_errors_to</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="identifier-syntax">inclusions_errors_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="Preform-reserved-syntax">void</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">Inclusions::check_ends_here</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="Preform-comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="Preform-function-syntax">Inclusions::check_ends_here</span></span>:<br/>Source Text - <a href="6-st.html#SP12">&#167;12</a></span></button><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">parse_node</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">PN</span><span class="Preform-plain-syntax">, </span><span class="Preform-reserved-syntax">inform_extension</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">E</span><span class="Preform-plain-syntax">) {</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">inbuild_copy</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">S</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">inclusions_errors_to</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">inclusions_errors_to</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">E</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">as_copy</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">wording</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">ParseTree::get_text</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">PN</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (&lt;</span><span class="Preform-identifier-syntax">the</span><span class="Preform-plain-syntax">-</span><span class="Preform-identifier-syntax">prefix</span><span class="Preform-plain-syntax">-</span><span class="Preform-reserved-syntax">for</span><span class="Preform-plain-syntax">-</span><span class="Preform-identifier-syntax">extensions</span><span class="Preform-plain-syntax">&gt;(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">)) </span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">GET_RW</span><span class="Preform-plain-syntax">(&lt;</span><span class="Preform-identifier-syntax">the</span><span class="Preform-plain-syntax">-</span><span class="Preform-identifier-syntax">prefix</span><span class="Preform-plain-syntax">-</span><span class="Preform-reserved-syntax">for</span><span class="Preform-plain-syntax">-</span><span class="Preform-identifier-syntax">extensions</span><span class="Preform-plain-syntax">&gt;, </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">wording</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">T</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Feeds::feed_stream</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">E</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">as_copy</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">edition</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">work</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">title</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">Wordings::match</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">T</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">) == </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">) {</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">copy_error</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">CE</span><span class="Preform-plain-syntax"> = </span><a href="2-ce.html#SP2" class="function-link"><span class="Preform-function-syntax">CopyErrors::new</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-constant-syntax">SYNTAX_CE</span><span class="Preform-plain-syntax">, </span><span class="Preform-constant-syntax">ExtMisidentifiedEnds_SYNERROR</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><a href="2-ce.html#SP3" class="function-link"><span class="Preform-function-syntax">CopyErrors::supply_node</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">CE</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">PN</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><a href="2-ce.html#SP3" class="function-link"><span class="Preform-function-syntax">CopyErrors::supply_wording</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">CE</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">ParseTree::get_text</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">PN</span><span class="Preform-plain-syntax">));</span>
<span class="Preform-plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="Preform-function-syntax">Copies::attach_error</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">inclusions_errors_to</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">CE</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">inclusions_errors_to</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">S</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.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">&#10094;</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-ed.html">7</a></li><li class="progressnext"><a href="6-cs.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -22,6 +22,7 @@ function togglePopup(material_id) {
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/ConsoleText-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Preform-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
@ -303,27 +304,28 @@ sections of source not being included for one reason or another.
and here goes:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">dividing</span><span class="plain-syntax">-</span><span class="identifier-syntax">sentence</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> &lt;</span><span class="reserved-syntax">if</span><span class="plain-syntax">-</span><span class="identifier-syntax">start</span><span class="plain-syntax">-</span><span class="identifier-syntax">of</span><span class="plain-syntax">-</span><span class="identifier-syntax">paragraph</span><span class="plain-syntax">&gt; &lt;</span><span class="reserved-syntax">heading</span><span class="plain-syntax">&gt; | ==&gt; </span><span class="identifier-syntax">R</span><span class="plain-syntax">[2]</span>
<span class="plain-syntax"> &lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">end</span><span class="plain-syntax">-</span><span class="identifier-syntax">marker</span><span class="plain-syntax">-</span><span class="identifier-syntax">sentence</span><span class="plain-syntax">&gt; ==&gt; </span><span class="identifier-syntax">R</span><span class="plain-syntax">[1]</span>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;dividing-sentence&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;if-start-of-paragraph&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;heading&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> R[2]</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;extension-end-marker-sentence&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> R[1]</span>
<span class="plain-syntax">&lt;</span><span class="reserved-syntax">heading</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">volume</span><span class="plain-syntax"> ... | ==&gt; </span><span class="constant-syntax">1</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">book</span><span class="plain-syntax"> ... | ==&gt; </span><span class="constant-syntax">2</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">part</span><span class="plain-syntax"> ... | ==&gt; </span><span class="constant-syntax">3</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">chapter</span><span class="plain-syntax"> ... | ==&gt; </span><span class="constant-syntax">4</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">section</span><span class="plain-syntax"> ... ==&gt; </span><span class="constant-syntax">5</span>
<span class="Preform-function-syntax">&lt;heading&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">volume</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 1</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">book</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 2</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">part</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 3</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">chapter</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 4</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">section</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 5</span>
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">end</span><span class="plain-syntax">-</span><span class="identifier-syntax">marker</span><span class="plain-syntax">-</span><span class="identifier-syntax">sentence</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> ... </span><span class="identifier-syntax">begin</span><span class="plain-syntax">/</span><span class="identifier-syntax">begins</span><span class="plain-syntax"> </span><span class="identifier-syntax">here</span><span class="plain-syntax"> | ==&gt; -1; </span><span class="named-paragraph-container code-font"><a href="6-st.html#SP9_1" class="named-paragraph-link"><span class="named-paragraph">Check we can begin an extension here</span><span class="named-paragraph-number">9.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> ... </span><span class="identifier-syntax">end</span><span class="plain-syntax">/</span><span class="identifier-syntax">ends</span><span class="plain-syntax"> </span><span class="identifier-syntax">here</span><span class="plain-syntax"> ==&gt; -2; </span><span class="named-paragraph-container code-font"><a href="6-st.html#SP9_2" class="named-paragraph-link"><span class="named-paragraph">Check we can end an extension here</span><span class="named-paragraph-number">9.2</span></a></span><span class="plain-syntax">;</span>
<span class="Preform-function-syntax">&lt;extension-end-marker-sentence&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">begin/begins</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">here</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> -1; </span><span class="named-paragraph-container code-font"><a href="6-st.html#SP9_1" class="named-paragraph-link"><span class="named-paragraph">Check we can begin an extension here</span><span class="named-paragraph-number">9.1</span></a></span><span class="Preform-constant-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">end/ends</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">here</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> -2; </span><span class="named-paragraph-container code-font"><a href="6-st.html#SP9_2" class="named-paragraph-link"><span class="named-paragraph">Check we can end an extension here</span><span class="named-paragraph-number">9.2</span></a></span><span class="Preform-constant-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_1"></a><b>&#167;9.1. </b>Note that the extension end markers are only read in extensions, so they can
never accidentally match in the main source text.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check we can begin an extension here</span><span class="named-paragraph-number">9.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check we can begin an extension here</span><span class="named-paragraph-number">9.1</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -348,36 +350,38 @@ never accidentally match in the main source text.
<p class="commentary firstcommentary"><a id="SP10"></a><b>&#167;10. </b><a href="../syntax-module/index.html" class="internal">syntax</a> also requires this definition:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">structural</span><span class="plain-syntax">-</span><span class="identifier-syntax">sentence</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> &lt;</span><span class="reserved-syntax">if</span><span class="plain-syntax">-</span><span class="identifier-syntax">start</span><span class="plain-syntax">-</span><span class="identifier-syntax">of</span><span class="plain-syntax">-</span><span class="identifier-syntax">source</span><span class="plain-syntax">-</span><span class="identifier-syntax">text</span><span class="plain-syntax">&gt; &lt;</span><span class="identifier-syntax">quoted</span><span class="plain-syntax">-</span><span class="identifier-syntax">text</span><span class="plain-syntax">&gt; | ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">sfsm</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="constant-syntax">BIBLIOGRAPHIC_NT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> &lt;</span><span class="reserved-syntax">if</span><span class="plain-syntax">-</span><span class="identifier-syntax">start</span><span class="plain-syntax">-</span><span class="identifier-syntax">of</span><span class="plain-syntax">-</span><span class="identifier-syntax">source</span><span class="plain-syntax">-</span><span class="identifier-syntax">text</span><span class="plain-syntax">&gt; &lt;</span><span class="identifier-syntax">quoted</span><span class="plain-syntax">-</span><span class="identifier-syntax">text</span><span class="plain-syntax">&gt; ... | ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">sfsm</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="constant-syntax">BIBLIOGRAPHIC_NT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> &lt;</span><span class="identifier-syntax">language</span><span class="plain-syntax">-</span><span class="identifier-syntax">modifying</span><span class="plain-syntax">-</span><span class="identifier-syntax">sentence</span><span class="plain-syntax">&gt; | ==&gt; </span><span class="identifier-syntax">R</span><span class="plain-syntax">[1]</span>
<span class="plain-syntax"> * | ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">sfsm</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRACE_NT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> * &lt;</span><span class="identifier-syntax">quoted</span><span class="plain-syntax">-</span><span class="identifier-syntax">text</span><span class="plain-syntax">-</span><span class="identifier-syntax">without</span><span class="plain-syntax">-</span><span class="identifier-syntax">subs</span><span class="plain-syntax">&gt; | ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">sfsm</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRACE_NT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> &lt;</span><span class="reserved-syntax">if</span><span class="plain-syntax">-</span><span class="identifier-syntax">start</span><span class="plain-syntax">-</span><span class="identifier-syntax">of</span><span class="plain-syntax">-</span><span class="identifier-syntax">paragraph</span><span class="plain-syntax">&gt; </span><span class="identifier-syntax">table</span><span class="plain-syntax"> ... | ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">sfsm</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="constant-syntax">TABLE_NT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> &lt;</span><span class="reserved-syntax">if</span><span class="plain-syntax">-</span><span class="identifier-syntax">start</span><span class="plain-syntax">-</span><span class="identifier-syntax">of</span><span class="plain-syntax">-</span><span class="identifier-syntax">paragraph</span><span class="plain-syntax">&gt; </span><span class="identifier-syntax">equation</span><span class="plain-syntax"> ... | ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">sfsm</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="constant-syntax">EQUATION_NT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">include</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> ... </span><span class="identifier-syntax">by</span><span class="plain-syntax"> ... | ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">sfsm</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">INCLUDE_NT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">include</span><span class="plain-syntax"> ... </span><span class="identifier-syntax">by</span><span class="plain-syntax"> ... | ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">sfsm</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">INCLUDE_NT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">include</span><span class="plain-syntax"> (- ... ==&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">sfsm</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="constant-syntax">INFORM6CODE_NT</span><span class="plain-syntax">;</span>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;structural-sentence&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;if-start-of-source-text&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;quoted-text&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; sfsm-&gt;nt = BIBLIOGRAPHIC_NT;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;if-start-of-source-text&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;quoted-text&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; sfsm-&gt;nt = BIBLIOGRAPHIC_NT;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;language-modifying-sentence&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> R[1]</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; sfsm-&gt;nt = TRACE_NT;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;quoted-text-without-subs&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; sfsm-&gt;nt = TRACE_NT;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;if-start-of-paragraph&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">table</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; sfsm-&gt;nt = TABLE_NT;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;if-start-of-paragraph&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">equation</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; sfsm-&gt;nt = EQUATION_NT;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">include</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">by</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; sfsm-&gt;nt = INCLUDE_NT;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">include</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">by</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; sfsm-&gt;nt = INCLUDE_NT;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">include</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">(-</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> 0; sfsm-&gt;nt = INFORM6CODE_NT;</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP11"></a><b>&#167;11. </b>Properly speaking, despite the definition above, language modifying sentences
are nonstructural. So what are they doing here? The answer is that we need to
read them early on, because they affect the way that they parse all other
sentences. Whereas other nonstructural sentences can wait, these can't.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">language</span><span class="plain-syntax">-</span><span class="identifier-syntax">modifying</span><span class="plain-syntax">-</span><span class="identifier-syntax">sentence</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">include</span><span class="plain-syntax"> (- ### </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">preform</span><span class="plain-syntax"> </span><span class="identifier-syntax">grammar</span><span class="plain-syntax"> | ==&gt; -2; </span><span class="identifier-syntax">sfsm</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="constant-syntax">INFORM6CODE_NT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">use</span><span class="plain-syntax"> ... </span><span class="identifier-syntax">language</span><span class="plain-syntax"> </span><span class="identifier-syntax">element</span><span class="plain-syntax">/</span><span class="identifier-syntax">elements</span><span class="plain-syntax"> ==&gt; -1</span>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;language-modifying-sentence&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">include</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">(-</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">###</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">in</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">preform</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">grammar</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> -2; sfsm-&gt;nt = INFORM6CODE_NT;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">use</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">language</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">element/elements</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> -1</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP12"></a><b>&#167;12. </b>The following callback function is called by <a href="../syntax-module/index.html" class="internal">syntax</a> when it breaks a
sentence of type <span class="extract"><span class="extract-syntax">BEGINHERE_NT</span></span> or <span class="extract"><span class="extract-syntax">ENDHERE_NT</span></span> &mdash; i.e., the beginning or end
sentence of type <span class="extract"><span class="Preform-extract-syntax">BEGINHERE_NT</span></span> or <span class="extract"><span class="Preform-extract-syntax">ENDHERE_NT</span></span> &mdash; i.e., the beginning or end
of an extension.
</p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">BEGIN_OR_END_HERE_SYNTAX_CALLBACK</span><span class="plain-syntax"> </span><a href="6-st.html#SP12" class="function-link"><span class="function-syntax">SourceText::new_beginend</span></a>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="Preform-constant-syntax">BEGIN_OR_END_HERE_SYNTAX_CALLBACK</span><span class="Preform-plain-syntax"> </span><a href="6-st.html#SP12" class="function-link"><span class="Preform-function-syntax">SourceText::new_beginend</span></a>
</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">SourceText::new_beginend</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</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>

View file

@ -13,6 +13,7 @@
<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">
<link href="../docs-assets/Preform-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
@ -99,16 +100,17 @@ after it, and may therefore affect how subsequent sentences are broken.
to declare the title and author.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">titling</span><span class="plain-syntax">-</span><span class="identifier-syntax">line</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> &lt;</span><span class="identifier-syntax">plain</span><span class="plain-syntax">-</span><span class="identifier-syntax">titling</span><span class="plain-syntax">-</span><span class="identifier-syntax">line</span><span class="plain-syntax">&gt; ( </span><span class="identifier-syntax">in</span><span class="plain-syntax"> &lt;</span><span class="identifier-syntax">natural</span><span class="plain-syntax">-</span><span class="identifier-syntax">language</span><span class="plain-syntax">&gt; ) | ==&gt; </span><span class="identifier-syntax">R</span><span class="plain-syntax">[1]; *</span><span class="identifier-syntax">XP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[2];</span>
<span class="plain-syntax"> &lt;</span><span class="identifier-syntax">plain</span><span class="plain-syntax">-</span><span class="identifier-syntax">titling</span><span class="plain-syntax">-</span><span class="identifier-syntax">line</span><span class="plain-syntax">&gt; ==&gt; </span><span class="identifier-syntax">R</span><span class="plain-syntax">[1]; *</span><span class="identifier-syntax">XP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;titling-line&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;plain-titling-line&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">in</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;natural-language&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> R[1]; *XP = RP[2];</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;plain-titling-line&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> R[1]; *XP = NULL;</span>
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">plain</span><span class="plain-syntax">-</span><span class="identifier-syntax">titling</span><span class="plain-syntax">-</span><span class="identifier-syntax">line</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> {&lt;</span><span class="identifier-syntax">quoted</span><span class="plain-syntax">-</span><span class="identifier-syntax">text</span><span class="plain-syntax">-</span><span class="identifier-syntax">without</span><span class="plain-syntax">-</span><span class="identifier-syntax">subs</span><span class="plain-syntax">&gt;} </span><span class="identifier-syntax">by</span><span class="plain-syntax"> ... | ==&gt; </span><span class="identifier-syntax">TRUE</span>
<span class="plain-syntax"> {&lt;</span><span class="identifier-syntax">quoted</span><span class="plain-syntax">-</span><span class="identifier-syntax">text</span><span class="plain-syntax">-</span><span class="identifier-syntax">without</span><span class="plain-syntax">-</span><span class="identifier-syntax">subs</span><span class="plain-syntax">&gt;} ==&gt; </span><span class="identifier-syntax">FALSE</span>
<span class="Preform-function-syntax">&lt;plain-titling-line&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{&lt;quoted-text-without-subs&gt;}</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">by</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> TRUE</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{&lt;quoted-text-without-subs&gt;}</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> FALSE</span>
</pre>
<p class="commentary firstcommentary"><a id="SP1_2"></a><b>&#167;1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Extract title and author name wording</span><span class="named-paragraph-number">1.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2"></a><b>&#167;1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Extract title and author name wording</span><span class="named-paragraph-number">1.2</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">

View file

@ -21,6 +21,7 @@ function togglePopup(material_id) {
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Preform-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
@ -93,10 +94,11 @@ unyielding the user's views, it's not allowed to write:
<p class="commentary">so the sentence-terminator will certainly be a full stop.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">use</span><span class="plain-syntax">-</span><span class="identifier-syntax">option</span><span class="plain-syntax">-</span><span class="identifier-syntax">sentence</span><span class="plain-syntax">-</span><span class="identifier-syntax">shape</span><span class="plain-syntax">&gt; ::=</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">use</span><span class="plain-syntax"> ... .</span>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;use-option-sentence-shape&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">use</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">.</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP2"></a><b>&#167;2. </b>There is just one options file, so no need to load it more than once.
</p>

View file

@ -13,6 +13,7 @@
<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">
<link href="../docs-assets/Preform-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
@ -67,36 +68,38 @@ out of scope when needed. Instead, we have to wrap it up in a holder object
to give it permanency.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">version</span><span class="plain-syntax">-</span><span class="identifier-syntax">number</span><span class="plain-syntax">&gt; </span><span class="identifier-syntax">internal</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">vtext</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">vtext</span><span class="plain-syntax">, </span><span class="string-syntax">"%W"</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">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">VersionNumbers::from_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">vtext</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">result</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">VersionNumbers::is_null</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</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">result</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">semantic_version_number_holder</span><span class="plain-syntax"> *</span><span class="identifier-syntax">H</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="identifier-syntax">semantic_version_number_holder</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">H</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">version</span><span class="plain-syntax"> = </span><span class="identifier-syntax">V</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">XP</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">H</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">vtext</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">result</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;version-number&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">internal</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TEMPORARY_TEXT</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vtext</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">WRITE_TO</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vtext</span><span class="Preform-plain-syntax">, </span><span class="Preform-string-syntax">"%W"</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">semantic_version_number</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">V</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">VersionNumbers::from_text</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vtext</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">int</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">result</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">VersionNumbers::is_null</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">V</span><span class="Preform-plain-syntax">) == </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">) {</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">result</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">semantic_version_number_holder</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">H</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">CREATE</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">semantic_version_number_holder</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">H</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-identifier-syntax">version</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">V</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">XP</span><span class="Preform-plain-syntax"> = (</span><span class="Preform-reserved-syntax">void</span><span class="Preform-plain-syntax"> *) </span><span class="Preform-identifier-syntax">H</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">DISCARD_TEXT</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vtext</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">result</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP2"></a><b>&#167;2. </b>The following nonterminal matches any valid description of a virtual machine,
with result <span class="extract"><span class="extract-syntax">TRUE</span></span> if the current target VM matches that description and
<span class="extract"><span class="extract-syntax">FALSE</span></span> if not.
with result <span class="extract"><span class="Preform-extract-syntax">TRUE</span></span> if the current target VM matches that description and
<span class="extract"><span class="Preform-extract-syntax">FALSE</span></span> if not.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">&lt;</span><span class="identifier-syntax">virtual</span><span class="plain-syntax">-</span><span class="identifier-syntax">machine</span><span class="plain-syntax">&gt; </span><span class="identifier-syntax">internal</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">vtext</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">vtext</span><span class="plain-syntax">, </span><span class="string-syntax">"%W"</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">compatibility_specification</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Compatibility::from_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">vtext</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">XP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C</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><span class="identifier-syntax">XP</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>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;virtual-machine&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">internal</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TEMPORARY_TEXT</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vtext</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">WRITE_TO</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vtext</span><span class="Preform-plain-syntax">, </span><span class="Preform-string-syntax">"%W"</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">compatibility_specification</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">C</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Compatibility::from_text</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vtext</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">C</span><span class="Preform-plain-syntax">) { *</span><span class="Preform-identifier-syntax">XP</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">C</span><span class="Preform-plain-syntax">; </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">; }</span>
<span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">XP</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">NULL</span><span class="Preform-plain-syntax">; </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.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">&#10094;</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-ed.html">7</a></li><li class="progressnext"><a href="7-ed.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -326,19 +326,17 @@ then its sentences will go to the extension's own tree.
E->body_text_unbroken = FALSE;
@ If an extension file contains the special text (outside literal mode) of
= (text)
---- Documentation ----
=
then this is taken as the end of the Inform source, and the beginning of a
snippet of documentation about the extension; text from that point on is
saved until later, but not broken into sentences for the parse tree, and it
is therefore invisible to the rest of Inform. If this division line is not
present then the extension contains only body source and no documentation.
|---- Documentation ----| then this is taken as the end of the Inform source,
and the beginning of a snippet of documentation about the extension; text from
that point on is saved until later, but not broken into sentences for the
parse tree, and it is therefore invisible to the rest of Inform. If this
division line is not present then the extension contains only body source
and no documentation.
=
<extension-body> ::=
*** ---- documentation ---- ... | ==> TRUE
... ==> FALSE
*** ---- documentation ---- ... | ==> TRUE
... ==> FALSE
@<Break the extension's text into body and documentation@> =
<extension-body>(EXW);

View file

@ -316,11 +316,11 @@ allowed; they should probably be withdrawn.
...... ==> @<Issue PM_UnknownVirtualMachine problem@>
<extension-qualifier> ::=
for use with <extension-identifier> | ==> USE_WITH_HQ
for use without <extension-identifier> | ==> USE_WITHOUT_HQ
not for use with <extension-identifier> | ==> USE_WITHOUT_HQ
in place of (<quoted-text>) in <extension-identifier> | ==> IN_PLACE_OF_HQ
in place of ...... in <extension-identifier> ==> IN_PLACE_OF_HQ
for use with <extension-identifier> | ==> USE_WITH_HQ
for use without <extension-identifier> | ==> USE_WITHOUT_HQ
not for use with <extension-identifier> | ==> USE_WITHOUT_HQ
in place of ( <quoted-text> ) in <extension-identifier> | ==> IN_PLACE_OF_HQ
in place of ...... in <extension-identifier> ==> IN_PLACE_OF_HQ
<extension-identifier> ::=
...... by ...... ==> @<Set for-use-with extension identifier@>