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

Improved linguistic markup of verb usage

This commit is contained in:
Graham Nelson 2020-07-04 18:22:03 +01:00
parent 0c51454fba
commit fe8e91e478
40 changed files with 2407 additions and 2245 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
v10.1.0-alpha.1+6Q65 'Krypton' (3 July 2020)
v10.1.0-alpha.1+6Q66 'Krypton' (4 July 2020)
## About Inform 7

View file

@ -1,3 +1,3 @@
Prerelease: alpha.1
Build Date: 3 July 2020
Build Number: 6Q65
Build Date: 4 July 2020
Build Number: 6Q66

View file

@ -133,8 +133,21 @@ this one:
this because we need access to it very quickly when parsing text substitutions.)
</p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">ADAPTIVE_PERSON_LINGUISTICS_CALLBACK</span><span class="plain-syntax"> </span><a href="3-nl.html#SP5" class="function-link"><span class="function-syntax">NaturalLanguages::adaptive_person</span></a>
<span class="definition-keyword">define</span> <span class="constant-syntax">ADAPTIVE_NUMBER_LINGUISTICS_CALLBACK</span><span class="plain-syntax"> </span><a href="3-nl.html#SP5" class="function-link"><span class="function-syntax">NaturalLanguages::adaptive_number</span></a>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">NaturalLanguages::adaptive_person</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">NaturalLanguages::adaptive_person</span></span>:<br/>Introduction to Semantics - <a href="4-its.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">NaturalLanguages::adaptive_person</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><a href="3-nl.html#SP5" class="function-link"><span class="function-syntax">NaturalLanguages::adaptive_combination</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax"> % </span><span class="identifier-syntax">NO_KNOWN_PERSONS</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">NaturalLanguages::adaptive_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><a href="3-nl.html#SP5" class="function-link"><span class="function-syntax">NaturalLanguages::adaptive_combination</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax"> / </span><span class="identifier-syntax">NO_KNOWN_PERSONS</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">NaturalLanguages::adaptive_combination</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">adaptive_person</span><span class="plain-syntax"> == -1) &amp;&amp; (</span><span class="identifier-syntax">P_adaptive_text_viewpoint</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">nl_instance</span><span class="plain-syntax">;</span>
@ -146,8 +159,7 @@ this because we need access to it very quickly when parsing text substitutions.)
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">adaptive_person</span><span class="plain-syntax"> == -1) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FIRST_PERSON_PLURAL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">adaptive_person</span><span class="plain-syntax"> == -1) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FIRST_PERSON</span><span class="plain-syntax"> + </span><span class="constant-syntax">3</span><span class="plain-syntax">; </span><span class="comment-syntax"> i.e., plural</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">adaptive_person</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -155,7 +167,7 @@ this because we need access to it very quickly when parsing text substitutions.)
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">NaturalLanguages::load_preform</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">NaturalLanguages::load_preform</span></span>:<br/>Introduction to Semantics - <a href="4-its.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">NaturalLanguages::load_preform</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">NaturalLanguages::load_preform</span></span>:<br/>Introduction to Semantics - <a href="4-its.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"can't load preform from null language"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">preform_file</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">Languages::path_to_bundle</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="string-syntax">"Syntax.preform"</span><span class="plain-syntax">);</span>
@ -166,7 +178,7 @@ this because we need access to it very quickly when parsing text substitutions.)
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NaturalLanguages::preform_error</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">NaturalLanguages::preform_error</span></span>:<br/>Introduction to Semantics - <a href="4-its.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">base_text</span><span class="plain-syntax">, </span><span class="identifier-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NaturalLanguages::preform_error</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">NaturalLanguages::preform_error</span></span>:<br/>Introduction to Semantics - <a href="4-its.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">base_text</span><span class="plain-syntax">, </span><span class="identifier-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">production</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">message</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">pr</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"The production at fault is:\n"</span><span class="plain-syntax">);</span>

View file

@ -286,8 +286,7 @@ whole thing into a <span class="extract"><span class="extract-syntax">specificat
<p class="commentary firstcommentary"><a id="SP7"></a><b>&#167;7. </b></p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">ADAPTIVE_PERSON_LINGUISTICS_CALLBACK</span><span class="plain-syntax"> </span><a href="3-nl.html#SP5" class="function-link"><span class="function-syntax">NaturalLanguages::adaptive_person</span></a>
<span class="definition-keyword">define</span> <span class="constant-syntax">MORE_PREFORM_OPTIMISER_WORDS_CALLBACK</span><span class="plain-syntax"> </span><a href="4-its.html#SP8" class="function-link"><span class="function-syntax">Semantics::mark_preform_requirements</span></a>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">MORE_PREFORM_OPTIMISER_WORDS_CALLBACK</span><span class="plain-syntax"> </span><a href="4-its.html#SP8" class="function-link"><span class="function-syntax">Semantics::mark_preform_requirements</span></a>
<span class="definition-keyword">define</span> <span class="constant-syntax">PREFORM_ERROR_WORDS_CALLBACK</span><span class="plain-syntax"> </span><a href="3-nl.html#SP7" class="function-link"><span class="function-syntax">NaturalLanguages::preform_error</span></a>
</pre>
<pre class="displayed-code all-displayed-code code-font">

View file

@ -167,14 +167,24 @@ cleared.)
<span class="Preform-reserved-syntax">void</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">NewVerbs::add_inequalities_inner</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">verb_meaning</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">lt</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">verb_meaning</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">gt</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">verb_meaning</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">le</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">verb_meaning</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">ge</span><span class="Preform-plain-syntax">) {</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">set_where_created</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">NULL</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">current_main_verb</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">NULL</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">VerbUsages::register_single_usage</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">PreformUtilities::wording</span><span class="Preform-plain-syntax">(</span><span class="Preform-function-syntax">&lt;inequality-conjugations&gt;</span><span class="Preform-plain-syntax">, </span><span class="Preform-constant-syntax">0</span><span class="Preform-plain-syntax">),</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">IS_TENSE</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">ACTIVE_MOOD</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">Verbs::new_operator_verb</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">lt</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">VerbUsages::register_single_usage</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">PreformUtilities::wording</span><span class="Preform-plain-syntax">(</span><span class="Preform-function-syntax">&lt;inequality-conjugations&gt;</span><span class="Preform-plain-syntax">, </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">FALSE</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">IS_TENSE</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">ACTIVE_MOOD</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">Verbs::new_operator_verb</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">gt</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">VerbUsages::register_single_usage</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">PreformUtilities::wording</span><span class="Preform-plain-syntax">(</span><span class="Preform-function-syntax">&lt;inequality-conjugations&gt;</span><span class="Preform-plain-syntax">, </span><span class="Preform-constant-syntax">2</span><span class="Preform-plain-syntax">),</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">IS_TENSE</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">ACTIVE_MOOD</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">Verbs::new_operator_verb</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">le</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">VerbUsages::register_single_usage</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">PreformUtilities::wording</span><span class="Preform-plain-syntax">(</span><span class="Preform-function-syntax">&lt;inequality-conjugations&gt;</span><span class="Preform-plain-syntax">, </span><span class="Preform-constant-syntax">3</span><span class="Preform-plain-syntax">),</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">IS_TENSE</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">ACTIVE_MOOD</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">Verbs::new_operator_verb</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">ge</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">for</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">i</span><span class="Preform-plain-syntax">=0; </span><span class="Preform-identifier-syntax">i</span><span class="Preform-plain-syntax">&lt;=3; </span><span class="Preform-identifier-syntax">i</span><span class="Preform-plain-syntax">++) {</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">verb</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">NULL</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">switch</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">i</span><span class="Preform-plain-syntax">) {</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">case</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0</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">Verbs::new_operator_verb</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">lt</span><span class="Preform-plain-syntax">); </span><span class="Preform-reserved-syntax">break</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">case</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</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">Verbs::new_operator_verb</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">gt</span><span class="Preform-plain-syntax">); </span><span class="Preform-reserved-syntax">break</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">case</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">2</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">Verbs::new_operator_verb</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">le</span><span class="Preform-plain-syntax">); </span><span class="Preform-reserved-syntax">break</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">case</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3</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">Verbs::new_operator_verb</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">ge</span><span class="Preform-plain-syntax">); </span><span class="Preform-reserved-syntax">break</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">lcon_ti</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">l</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Verbs::to_lcon</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">l</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Lcon::set_mood</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">l</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">ACTIVE_MOOD</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">l</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Lcon::set_tense</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">l</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">IS_TENSE</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">l</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Lcon::set_sense</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">l</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">POSITIVE_SENSE</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">l</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Lcon::set_person</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">l</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">THIRD_PERSON</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">l</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Lcon::set_number</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">l</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">SINGULAR_NUMBER</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">VerbUsages::register_single_usage</span><span class="Preform-plain-syntax">(</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">PreformUtilities::wording</span><span class="Preform-plain-syntax">(</span><span class="Preform-function-syntax">&lt;inequality-conjugations&gt;</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">i</span><span class="Preform-plain-syntax">), </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">l</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> }</span>
<span class="Preform-plain-syntax">}</span>
<span class="Preform-identifier-syntax">verb_meaning</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">NewVerbs::ineq_vm</span><span class="Preform-plain-syntax">(</span><span class="Preform-reserved-syntax">binary_predicate</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">bp</span><span class="Preform-plain-syntax">) {</span>
@ -1140,11 +1150,12 @@ foreign verbs (4).
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">sense</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">sense</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">2</span><span class="plain-syntax">; </span><span class="identifier-syntax">sense</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">sense</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">sense</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">NO_KNOWN_SENSES</span><span class="plain-syntax">; </span><span class="identifier-syntax">sense</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">tense</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">NO_KNOWN_TENSES</span><span class="plain-syntax">; </span><span class="identifier-syntax">tense</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">part</span><span class="plain-syntax">=1; </span><span class="identifier-syntax">part</span><span class="plain-syntax">&lt;=6; </span><span class="identifier-syntax">part</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">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">modal_auxiliary_usage</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">part</span><span class="plain-syntax">-1] != </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">modal_verb</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">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">person</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">person</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">NO_KNOWN_PERSONS</span><span class="plain-syntax">; </span><span class="identifier-syntax">person</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">number</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">NO_KNOWN_NUMBERS</span><span class="plain-syntax">; </span><span class="identifier-syntax">number</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">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">modal_auxiliary_usage</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">person</span><span class="plain-syntax">][</span><span class="identifier-syntax">number</span><span class="plain-syntax">] != </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">modal_verb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="6-nv.html#SP20_1">&#167;20.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP20_1_2"></a><b>&#167;20.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile conjugation in this sense</span><span class="named-paragraph-number">20.1.2</span></span><span class="comment-syntax"> =</span>
@ -1155,27 +1166,29 @@ foreign verbs (4).
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">some_exist</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">some_dont_exist</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">some_differ</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">some_except_3PS_differ</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">some_are_modal</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">word_assemblage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">common</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">common_except_3PS</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">part</span><span class="plain-syntax">=1; </span><span class="identifier-syntax">part</span><span class="plain-syntax">&lt;=6; </span><span class="identifier-syntax">part</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">part</span><span class="plain-syntax">-1]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">WordAssemblages::nonempty</span><span class="plain-syntax">(*</span><span class="identifier-syntax">wa</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">some_exist</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">WordAssemblages::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">wa</span><span class="plain-syntax">, </span><span class="identifier-syntax">common</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">some_differ</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">part</span><span class="plain-syntax"> != </span><span class="constant-syntax">3</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">common_except_3PS</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">common_except_3PS</span><span class="plain-syntax"> = </span><span class="identifier-syntax">wa</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">WordAssemblages::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">wa</span><span class="plain-syntax">, </span><span class="identifier-syntax">common_except_3PS</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">some_except_3PS_differ</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">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">person</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">person</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">NO_KNOWN_PERSONS</span><span class="plain-syntax">; </span><span class="identifier-syntax">person</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">number</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">NO_KNOWN_NUMBERS</span><span class="plain-syntax">; </span><span class="identifier-syntax">number</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">person</span><span class="plain-syntax">][</span><span class="identifier-syntax">number</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">WordAssemblages::nonempty</span><span class="plain-syntax">(*</span><span class="identifier-syntax">wa</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">some_exist</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">WordAssemblages::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">wa</span><span class="plain-syntax">, </span><span class="identifier-syntax">common</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">some_differ</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">person</span><span class="plain-syntax"> != </span><span class="identifier-syntax">THIRD_PERSON</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">number</span><span class="plain-syntax"> != </span><span class="identifier-syntax">SINGULAR_NUMBER</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">common_except_3PS</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">common_except_3PS</span><span class="plain-syntax"> = </span><span class="identifier-syntax">wa</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">WordAssemblages::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">wa</span><span class="plain-syntax">, </span><span class="identifier-syntax">common_except_3PS</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">some_except_3PS_differ</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">some_exist</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">common</span><span class="plain-syntax"> = </span><span class="identifier-syntax">wa</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">person</span><span class="plain-syntax"> != </span><span class="identifier-syntax">THIRD_PERSON</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">number</span><span class="plain-syntax"> != </span><span class="identifier-syntax">SINGULAR_NUMBER</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">common_except_3PS</span><span class="plain-syntax"> = </span><span class="identifier-syntax">wa</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">some_exist</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">common</span><span class="plain-syntax"> = </span><span class="identifier-syntax">wa</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">part</span><span class="plain-syntax"> != </span><span class="constant-syntax">3</span><span class="plain-syntax">) </span><span class="identifier-syntax">common_except_3PS</span><span class="plain-syntax"> = </span><span class="identifier-syntax">wa</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">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">modal_auxiliary_usage</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">person</span><span class="plain-syntax">][</span><span class="identifier-syntax">number</span><span class="plain-syntax">] != </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">some_are_modal</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">modal_auxiliary_usage</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">part</span><span class="plain-syntax">-1] != </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">some_are_modal</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="identifier-syntax">some_dont_exist</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">some_dont_exist</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">some_exist</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">CASE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
@ -1205,20 +1218,22 @@ foreign verbs (4).
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_symbol</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">vp_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::code</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">part</span><span class="plain-syntax">=1; </span><span class="identifier-syntax">part</span><span class="plain-syntax">&lt;=6; </span><span class="identifier-syntax">part</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">part</span><span class="plain-syntax">-1]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">WordAssemblages::nonempty</span><span class="plain-syntax">(*</span><span class="identifier-syntax">wa</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">CASE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">part</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::code</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">person</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">person</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">NO_KNOWN_PERSONS</span><span class="plain-syntax">; </span><span class="identifier-syntax">person</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">number</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">NO_KNOWN_NUMBERS</span><span class="plain-syntax">; </span><span class="identifier-syntax">number</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">person</span><span class="plain-syntax">][</span><span class="identifier-syntax">number</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">WordAssemblages::nonempty</span><span class="plain-syntax">(*</span><span class="identifier-syntax">wa</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">CASE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><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">mau</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">modal_auxiliary_usage</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">part</span><span class="plain-syntax">-1];</span>
<span class="plain-syntax"> </span><a href="6-nv.html#SP21" class="function-link"><span class="function-syntax">NewVerbs::conj_from_wa</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">wa</span><span class="plain-syntax">, </span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="identifier-syntax">modal_to_s</span><span class="plain-syntax">, </span><span class="identifier-syntax">mau</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">part</span><span class="plain-syntax"> = ((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">person</span><span class="plain-syntax">) + </span><span class="constant-syntax">3</span><span class="plain-syntax">*((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">number</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">Produce::val</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">part</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::code</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><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">mau</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">modal_auxiliary_usage</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">person</span><span class="plain-syntax">][</span><span class="identifier-syntax">number</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><a href="6-nv.html#SP21" class="function-link"><span class="function-syntax">NewVerbs::conj_from_wa</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">wa</span><span class="plain-syntax">, </span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="identifier-syntax">modal_to_s</span><span class="plain-syntax">, </span><span class="identifier-syntax">mau</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
</pre>
@ -1236,12 +1251,12 @@ foreign verbs (4).
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::code</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][2]);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">THIRD_PERSON</span><span class="plain-syntax">][</span><span class="identifier-syntax">SINGULAR_NUMBER</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><a href="6-nv.html#SP21" class="function-link"><span class="function-syntax">NewVerbs::conj_from_wa</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">wa</span><span class="plain-syntax">, </span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="identifier-syntax">modal_to_s</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::code</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][0]);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">FIRST_PERSON</span><span class="plain-syntax">][</span><span class="identifier-syntax">SINGULAR_NUMBER</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><a href="6-nv.html#SP21" class="function-link"><span class="function-syntax">NewVerbs::conj_from_wa</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">wa</span><span class="plain-syntax">, </span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="identifier-syntax">modal_to_s</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
@ -1251,7 +1266,7 @@ foreign verbs (4).
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][0]);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">FIRST_PERSON</span><span class="plain-syntax">][</span><span class="identifier-syntax">SINGULAR_NUMBER</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><a href="6-nv.html#SP21" class="function-link"><span class="function-syntax">NewVerbs::conj_from_wa</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">wa</span><span class="plain-syntax">, </span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="identifier-syntax">modal_to_s</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="6-nv.html#SP20_1_2">&#167;20.1.2</a>.</li></ul>
@ -1384,10 +1399,7 @@ usages to the debugging log.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NewVerbs::log</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">NewVerbs::log</span></span>:<br/>Parse Tree Usage - <a href="7-ptu.html#SP14_1">&#167;14.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu</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">vu</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) { </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"(null verb usage)"</span><span class="plain-syntax">); </span><span class="reserved-syntax">return</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"VU: $f "</span><span class="plain-syntax">, &amp;(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">vu_text</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">vu</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">negated_form_of_verb</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"(negated) "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Lcon::log_tense_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">DL</span><span class="plain-syntax">, </span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tensed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VerbUsages::write</span><span class="plain-syntax">(</span><span class="identifier-syntax">DL</span><span class="plain-syntax">, </span><span class="identifier-syntax">vu</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NewVerbs::log_all</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">NewVerbs::log_all</span></span>:<br/>Main Routine - <a href="1-mr.html#SP1_6">&#167;1.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
@ -1407,7 +1419,7 @@ usages to the debugging log.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NewVerbs::tabulate</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tensename</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NewVerbs::tabulate</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tensename</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu</span><span class="plain-syntax">; </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">f</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">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">, </span><span class="identifier-syntax">verb_usage</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">vu</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">vu_lex_entry</span><span class="plain-syntax"> == </span><span class="identifier-syntax">lex</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">VerbUsages::is_used_negatively</span><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
@ -1427,13 +1439,13 @@ usages to the debugging log.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">f</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NewVerbs::tabulate_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NewVerbs::tabulate_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">, </span><span class="identifier-syntax">verb_usage</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">vu</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">vu_lex_entry</span><span class="plain-syntax"> == </span><span class="identifier-syntax">lex</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">vu</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">where_vu_created</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Index::link</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">where_vu_created</span><span class="plain-syntax">)));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">VerbMeanings::get_regular_meaning_of_form</span><span class="plain-syntax">(</span><span class="identifier-syntax">Verbs::base_form</span><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">verb_used</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">VerbMeanings::get_regular_meaning_of_form</span><span class="plain-syntax">(</span><span class="identifier-syntax">Verbs::base_form</span><span class="plain-syntax">(</span><span class="identifier-syntax">VerbUsages::get_verb</span><span class="plain-syntax">(</span><span class="identifier-syntax">vu</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">bp</span><span class="plain-syntax">) </span><a href="6-rlt.html#SP32" class="function-link"><span class="function-syntax">Relations::index_for_verbs</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>

View file

@ -71,13 +71,13 @@ which use this module:
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">documentation_ref_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">index_page_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">index_element_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">lexicon_entry_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">index_lexicon_entry_CLASS</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">documentation_ref</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">index_element</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">index_page</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax">)</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3"></a><b>&#167;3. </b>Like all modules, this one must define a <span class="extract"><span class="extract-syntax">start</span></span> and <span class="extract"><span class="extract-syntax">end</span></span> function:
</p>

View file

@ -94,7 +94,7 @@ any collation of up to 5 vocabulary entries.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax"> {</span>
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording_of_entry</span><span class="plain-syntax">; </span><span class="comment-syntax"> either the text of the entry, or empty, in which case...</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_of_entry</span><span class="plain-syntax">;</span>
@ -105,23 +105,23 @@ any collation of up to 5 vocabulary entries.
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gloss_note</span><span class="plain-syntax">; </span><span class="comment-syntax"> gloss on the definition, or </span><span class="extract"><span class="extract-syntax">NULL</span></span><span class="comment-syntax"> if none is provided</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">reduced_to_lower_case</span><span class="plain-syntax">; </span><span class="comment-syntax"> text converted to lower case for sorting</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sorted_next</span><span class="plain-syntax">; </span><span class="comment-syntax"> next in lexicographic order</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sorted_next</span><span class="plain-syntax">; </span><span class="comment-syntax"> next in lexicographic order</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax">;</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure lexicon_entry is private to this section.</li></ul>
<ul class="endnotetexts"><li>The structure index_lexicon_entry is private to this section.</li></ul>
<p class="commentary firstcommentary"><a id="SP4"></a><b>&#167;4. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sorted_lexicon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> head of list in lexicographic order</span>
<span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">current_main_verb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> when parsing verb declarations</span>
<span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sorted_lexicon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> head of list in lexicographic order</span>
<span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">current_main_verb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> when parsing verb declarations</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5"></a><b>&#167;5. </b>Lexicon entries are created by the following routine:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="function-syntax">IndexLexicon::lexicon_new_entry</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">IndexLexicon::lexicon_new_entry</span></span>:<br/><a href="2-li.html#SP6">&#167;6</a>, <a href="2-li.html#SP8_2">&#167;8.2</a>, <a href="2-li.html#SP8_3">&#167;8.3</a>, <a href="2-li.html#SP8_4">&#167;8.4</a>, <a href="2-li.html#SP8_5">&#167;8.5</a></span></button><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="plain-syntax"> </span><span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax">);</span>
<span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="function-syntax">IndexLexicon::lexicon_new_entry</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">IndexLexicon::lexicon_new_entry</span></span>:<br/><a href="2-li.html#SP6">&#167;6</a>, <a href="2-li.html#SP8_2">&#167;8.2</a>, <a href="2-li.html#SP8_3">&#167;8.3</a>, <a href="2-li.html#SP8_4">&#167;8.4</a>, <a href="2-li.html#SP8_5">&#167;8.5</a></span></button><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="plain-syntax"> </span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">wording_of_entry</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">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">text_of_entry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::lit_0</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">part_of_speech</span><span class="plain-syntax"> = </span><span class="constant-syntax">MISCELLANEOUS_LEXE</span><span class="plain-syntax">;</span>
@ -137,17 +137,17 @@ same verb are grouped together in the verbs table.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="function-syntax">IndexLexicon::new_entry_with_details</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pos</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="function-syntax">IndexLexicon::new_entry_with_details</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pos</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">category</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gloss</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><a href="2-li.html#SP5" class="function-link"><span class="function-syntax">IndexLexicon::lexicon_new_entry</span></a><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">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><a href="2-li.html#SP5" class="function-link"><span class="function-syntax">IndexLexicon::lexicon_new_entry</span></a><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">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">part_of_speech</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pos</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">text_of_entry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">wa</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">category</span><span class="plain-syntax"> = </span><span class="identifier-syntax">category</span><span class="plain-syntax">; </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">gloss_note</span><span class="plain-syntax"> = </span><span class="identifier-syntax">gloss</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">lex</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="function-syntax">IndexLexicon::new_main_verb</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">IndexLexicon::new_main_verb</span></span>:<br/><a href="2-li.html#SP8_6">&#167;8.6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">infinitive</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">part</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><a href="2-li.html#SP5" class="function-link"><span class="function-syntax">IndexLexicon::lexicon_new_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">);</span>
<span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="function-syntax">IndexLexicon::new_main_verb</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">IndexLexicon::new_main_verb</span></span>:<br/><a href="2-li.html#SP8_6">&#167;8.6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">infinitive</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">part</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><a href="2-li.html#SP5" class="function-link"><span class="function-syntax">IndexLexicon::lexicon_new_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">text_of_entry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">infinitive</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">part_of_speech</span><span class="plain-syntax"> = </span><span class="identifier-syntax">part</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">category</span><span class="plain-syntax"> = </span><span class="string-syntax">"verb"</span><span class="plain-syntax">;</span>
@ -162,7 +162,7 @@ routine which extracts the name in plain text from either source.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">IndexLexicon::lexicon_copy_to_stream</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">IndexLexicon::lexicon_copy_to_stream</span></span>:<br/><a href="2-li.html#SP8_8">&#167;8.8</a>, <a href="2-li.html#SP8_11_1">&#167;8.11.1</a>, <a href="2-li.html#SP9">&#167;9</a>, <a href="2-li.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">IndexLexicon::lexicon_copy_to_stream</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">IndexLexicon::lexicon_copy_to_stream</span></span>:<br/><a href="2-li.html#SP8_8">&#167;8.8</a>, <a href="2-li.html#SP8_11_1">&#167;8.11.1</a>, <a href="2-li.html#SP9">&#167;9</a>, <a href="2-li.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">wording_of_entry</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">text</span><span class="plain-syntax">, </span><span class="string-syntax">"%+W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">wording_of_entry</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
@ -210,7 +210,7 @@ only, for the foot of the World index.
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_OBJECT_INSTANCES</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</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">Instances::get_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><a href="2-li.html#SP5" class="function-link"><span class="function-syntax">IndexLexicon::lexicon_new_entry</span></a><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">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><a href="2-li.html#SP5" class="function-link"><span class="function-syntax">IndexLexicon::lexicon_new_entry</span></a><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">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">part_of_speech</span><span class="plain-syntax"> = </span><span class="constant-syntax">PROPER_NOUN_LEXE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">category</span><span class="plain-syntax"> = </span><span class="string-syntax">"noun"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">entry_refers_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_instance</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
@ -232,7 +232,7 @@ source text.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Compare::lt</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_object</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">Kinds::Behaviour::get_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><a href="2-li.html#SP5" class="function-link"><span class="function-syntax">IndexLexicon::lexicon_new_entry</span></a><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">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><a href="2-li.html#SP5" class="function-link"><span class="function-syntax">IndexLexicon::lexicon_new_entry</span></a><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">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">part_of_speech</span><span class="plain-syntax"> = </span><span class="constant-syntax">NOUN_LEXE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">category</span><span class="plain-syntax"> = </span><span class="string-syntax">"noun"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">entry_refers_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
@ -247,7 +247,7 @@ source text.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">adjective</span><span class="plain-syntax"> *</span><span class="identifier-syntax">adj</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">adj</span><span class="plain-syntax">, </span><span class="identifier-syntax">adjective</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">Adjectives::get_nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">adj</span><span class="plain-syntax">);</span>
@ -269,7 +269,7 @@ on. (Sometimes these will also be listed separately with an adjectival sense.)
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">qn</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_ENUMERATION_INSTANCES</span><span class="plain-syntax">(</span><span class="identifier-syntax">qn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax"> =</span>
@ -319,8 +319,8 @@ into a single, canonical, lower-case representation.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">, </span><span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">, </span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-li.html#SP7" class="function-link"><span class="function-syntax">IndexLexicon::lexicon_copy_to_stream</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">, </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">reduced_to_lower_case</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">reduced_to_lower_case</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::put</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">Characters::tolower</span><span class="plain-syntax">(</span><span class="identifier-syntax">Str::get</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">)));</span>
@ -337,9 +337,9 @@ than (say) quicksort is not great.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">, </span><span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex2</span><span class="plain-syntax">, *</span><span class="identifier-syntax">last_lex</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">, </span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex2</span><span class="plain-syntax">, *</span><span class="identifier-syntax">last_lex</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">sorted_lexicon</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sorted_lexicon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lex</span><span class="plain-syntax">; </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">sorted_next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
@ -390,7 +390,7 @@ explanation of what it is: for instance,
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">current_initial_letter</span><span class="plain-syntax"> = </span><span class="character-syntax">'?'</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><span class="identifier-syntax">sorted_lexicon</span><span class="plain-syntax">; </span><span class="identifier-syntax">lex</span><span class="plain-syntax">; </span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">sorted_next</span><span class="plain-syntax">)</span>
@ -593,7 +593,7 @@ of value.
<span class="plain-syntax"> </span><span class="string-syntax">"and can be used in adaptive text, but they have no meaning to Inform, so "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"they can't be used in sentences about what's in the story."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><span class="identifier-syntax">sorted_lexicon</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><span class="identifier-syntax">sorted_lexicon</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">verb_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><span class="identifier-syntax">sorted_lexicon</span><span class="plain-syntax">; </span><span class="identifier-syntax">lex</span><span class="plain-syntax">; </span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">sorted_next</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">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">part_of_speech</span><span class="plain-syntax"> == </span><span class="constant-syntax">VERB_LEXE</span><span class="plain-syntax">) ||</span>
@ -630,8 +630,8 @@ be able to print out a table of just those verbs created in that extension.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">IndexLexicon::list_verbs_in_file</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">source_file</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sf</span><span class="plain-syntax">, </span><span class="identifier-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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">, </span><span class="reserved-syntax">lexicon_entry</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">, </span><span class="reserved-syntax">index_lexicon_entry</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">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">part_of_speech</span><span class="plain-syntax"> == </span><span class="constant-syntax">VERB_LEXE</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">part_of_speech</span><span class="plain-syntax"> == </span><span class="constant-syntax">ABLE_VERB_LEXE</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> &amp;&amp; (</span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">verb_defined_at</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> &amp;&amp; (</span><span class="identifier-syntax">Lexer::file_of_origin</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">verb_defined_at</span><span class="plain-syntax">))) == </span><span class="identifier-syntax">sf</span><span class="plain-syntax">)) {</span>

View file

@ -81,16 +81,10 @@ in the English Language extension, which we assume will be followed by other
languages.
</p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">NO_KNOWN_PERSONS</span><span class="plain-syntax"> </span><span class="constant-syntax">6</span>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">NO_KNOWN_PERSONS</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">FIRST_PERSON</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">SECOND_PERSON</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">THIRD_PERSON</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">FIRST_PERSON_SINGULAR</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">SECOND_PERSON_SINGULAR</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">THIRD_PERSON_SINGULAR</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">FIRST_PERSON_PLURAL</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">SECOND_PERSON_PLURAL</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">THIRD_PERSON_PLURAL</span><span class="plain-syntax"> </span><span class="constant-syntax">5</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3"></a><b>&#167;3. </b>And two numbers:
</p>
@ -181,6 +175,7 @@ values, and at present Preform return values are <span class="extract"><span cla
<span class="definition-keyword">define</span> <span class="constant-syntax">SENSE_LCBASE</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00004000</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">SENSE_LCMASK</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00004000</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">ID_LCBASE</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00008000</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">ID_LCUNMASK</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00007FFF</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="constant-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="function-syntax">Lcon::base</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Lcon::base</span></span>:<br/>Declensions - <a href="3-dcl.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) { </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="constant-syntax">lcon_ti</span><span class="plain-syntax">) </span><span class="constant-syntax">0</span><span class="plain-syntax">; }</span>
@ -195,6 +190,7 @@ values, and at present Preform return values are <span class="extract"><span cla
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Lcon::get_tense</span><span class="plain-syntax">(</span><span class="constant-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax">) { </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax">) (</span><span class="identifier-syntax">l</span><span class="plain-syntax"> &amp; </span><span class="constant-syntax">TENSE_LCMASK</span><span class="plain-syntax">) / </span><span class="constant-syntax">TENSE_LCBASE</span><span class="plain-syntax">; }</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Lcon::get_sense</span><span class="plain-syntax">(</span><span class="constant-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax">) { </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax">) (</span><span class="identifier-syntax">l</span><span class="plain-syntax"> &amp; </span><span class="constant-syntax">SENSE_LCMASK</span><span class="plain-syntax">) / </span><span class="constant-syntax">SENSE_LCBASE</span><span class="plain-syntax">; }</span>
<span class="constant-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="function-syntax">Lcon::set_id</span><span class="plain-syntax">(</span><span class="constant-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">) { </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="identifier-syntax">l</span><span class="plain-syntax"> &amp; </span><span class="constant-syntax">ID_LCUNMASK</span><span class="plain-syntax">) + </span><span class="identifier-syntax">id</span><span class="plain-syntax">*</span><span class="constant-syntax">ID_LCBASE</span><span class="plain-syntax">; }</span>
<span class="constant-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="function-syntax">Lcon::set_gender</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Lcon::set_gender</span></span>:<br/>Declensions - <a href="3-dcl.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="constant-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">x</span><span class="plain-syntax">) { </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="identifier-syntax">l</span><span class="plain-syntax"> &amp; (~</span><span class="constant-syntax">GENDER_LCMASK</span><span class="plain-syntax">)) + </span><span class="identifier-syntax">x</span><span class="plain-syntax">*</span><span class="constant-syntax">GENDER_LCBASE</span><span class="plain-syntax">; }</span>
<span class="constant-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="function-syntax">Lcon::set_person</span><span class="plain-syntax">(</span><span class="constant-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">x</span><span class="plain-syntax">) { </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="identifier-syntax">l</span><span class="plain-syntax"> &amp; (~</span><span class="constant-syntax">PERSON_LCMASK</span><span class="plain-syntax">)) + </span><span class="identifier-syntax">x</span><span class="plain-syntax">*</span><span class="constant-syntax">PERSON_LCBASE</span><span class="plain-syntax">; }</span>
<span class="constant-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="function-syntax">Lcon::set_number</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Lcon::set_number</span></span>:<br/>Declensions - <a href="3-dcl.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="constant-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">x</span><span class="plain-syntax">) { </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="identifier-syntax">l</span><span class="plain-syntax"> &amp; (~</span><span class="constant-syntax">NUMBER_LCMASK</span><span class="plain-syntax">)) + </span><span class="identifier-syntax">x</span><span class="plain-syntax">*</span><span class="constant-syntax">NUMBER_LCBASE</span><span class="plain-syntax">; }</span>
@ -206,7 +202,41 @@ values, and at present Preform return values are <span class="extract"><span cla
<p class="commentary firstcommentary"><a id="SP10"></a><b>&#167;10. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lcon::log_tense_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lcon::write_person</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">FIRST_PERSON:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"1p"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SECOND_PERSON:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"2p"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">THIRD_PERSON:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"3p"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lcon::write_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SINGULAR_NUMBER:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" s"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PLURAL_NUMBER:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" p"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lcon::write_gender</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">g</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">g</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NEUTER_GENDER:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" (n)"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MASCULINE_GENDER:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" (m)"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">FEMININE_GENDER:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" (f)"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lcon::write_sense</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">s</span><span class="plain-syntax"> == </span><span class="constant-syntax">NEGATIVE_SENSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" -ve"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">s</span><span class="plain-syntax"> == </span><span class="constant-syntax">POSITIVE_SENSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" +ve"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lcon::write_mood</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m</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">m</span><span class="plain-syntax"> == </span><span class="constant-syntax">ACTIVE_MOOD</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" act"</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">m</span><span class="plain-syntax"> == </span><span class="constant-syntax">PASSIVE_MOOD</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" pass"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lcon::write_tense</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">IS_TENSE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"IS_TENSE"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">WAS_TENSE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"WAS_TENSE"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>

View file

@ -99,8 +99,8 @@ English it looks wasteful, since so many forms are the same, but for French
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">verb_tabulation</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">to_be_auxiliary</span><span class="plain-syntax">; </span><span class="comment-syntax"> use this if non-empty</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">vc_text</span><span class="plain-syntax">[</span><span class="constant-syntax">NO_KNOWN_TENSES</span><span class="plain-syntax">][2][6];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">modal_auxiliary_usage</span><span class="plain-syntax">[</span><span class="constant-syntax">NO_KNOWN_TENSES</span><span class="plain-syntax">][2][6];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">vc_text</span><span class="plain-syntax">[</span><span class="constant-syntax">NO_KNOWN_TENSES</span><span class="plain-syntax">][</span><span class="constant-syntax">NO_KNOWN_SENSES</span><span class="plain-syntax">][</span><span class="constant-syntax">NO_KNOWN_PERSONS</span><span class="plain-syntax">][</span><span class="constant-syntax">NO_KNOWN_NUMBERS</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">modal_auxiliary_usage</span><span class="plain-syntax">[</span><span class="constant-syntax">NO_KNOWN_TENSES</span><span class="plain-syntax">][</span><span class="constant-syntax">NO_KNOWN_SENSES</span><span class="plain-syntax">][</span><span class="constant-syntax">NO_KNOWN_PERSONS</span><span class="plain-syntax">][</span><span class="constant-syntax">NO_KNOWN_NUMBERS</span><span class="plain-syntax">];</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">verb_tabulation</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure verb_conjugation is accessed in 2/plr and here.</li><li>The structure verb_tabulation is private to this section.</li></ul>
@ -142,15 +142,16 @@ English it looks wasteful, since so many forms are the same, but for French
<span class="plain-syntax"> </span><span class="reserved-syntax">verb_tabulation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vt</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</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">WordAssemblages::eq</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> &amp;(</span><span class="identifier-syntax">nvt</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">to_be_auxiliary</span><span class="plain-syntax">), &amp;(</span><span class="identifier-syntax">vt</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">to_be_auxiliary</span><span class="plain-syntax">)) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">p</span><span class="plain-syntax">&lt;6; </span><span class="identifier-syntax">p</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">s</span><span class="plain-syntax">&lt;2; </span><span class="identifier-syntax">s</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">t</span><span class="plain-syntax">&lt;</span><span class="constant-syntax">NO_KNOWN_TENSES</span><span class="plain-syntax">; </span><span class="identifier-syntax">t</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">WordAssemblages::eq</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> &amp;(</span><span class="identifier-syntax">nvt</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">t</span><span class="plain-syntax">][</span><span class="identifier-syntax">s</span><span class="plain-syntax">][</span><span class="identifier-syntax">p</span><span class="plain-syntax">]), &amp;(</span><span class="identifier-syntax">vt</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">t</span><span class="plain-syntax">][</span><span class="identifier-syntax">s</span><span class="plain-syntax">][</span><span class="identifier-syntax">p</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">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">t</span><span class="plain-syntax">&lt;</span><span class="constant-syntax">NO_KNOWN_TENSES</span><span class="plain-syntax">; </span><span class="identifier-syntax">t</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">s</span><span class="plain-syntax">&lt;</span><span class="constant-syntax">NO_KNOWN_SENSES</span><span class="plain-syntax">; </span><span class="identifier-syntax">s</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">p</span><span class="plain-syntax">&lt;</span><span class="constant-syntax">NO_KNOWN_PERSONS</span><span class="plain-syntax">; </span><span class="identifier-syntax">p</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">n</span><span class="plain-syntax">&lt;</span><span class="constant-syntax">NO_KNOWN_NUMBERS</span><span class="plain-syntax">; </span><span class="identifier-syntax">n</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">WordAssemblages::eq</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> &amp;(</span><span class="identifier-syntax">nvt</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">t</span><span class="plain-syntax">][</span><span class="identifier-syntax">s</span><span class="plain-syntax">][</span><span class="identifier-syntax">p</span><span class="plain-syntax">][</span><span class="identifier-syntax">n</span><span class="plain-syntax">]), &amp;(</span><span class="identifier-syntax">vt</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">t</span><span class="plain-syntax">][</span><span class="identifier-syntax">s</span><span class="plain-syntax">][</span><span class="identifier-syntax">p</span><span class="plain-syntax">][</span><span class="identifier-syntax">n</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nvt</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">modal_auxiliary_usage</span><span class="plain-syntax">[</span><span class="identifier-syntax">t</span><span class="plain-syntax">][</span><span class="identifier-syntax">s</span><span class="plain-syntax">][</span><span class="identifier-syntax">p</span><span class="plain-syntax">] !=</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vt</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">modal_auxiliary_usage</span><span class="plain-syntax">[</span><span class="identifier-syntax">t</span><span class="plain-syntax">][</span><span class="identifier-syntax">s</span><span class="plain-syntax">][</span><span class="identifier-syntax">p</span><span class="plain-syntax">]) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nvt</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">modal_auxiliary_usage</span><span class="plain-syntax">[</span><span class="identifier-syntax">t</span><span class="plain-syntax">][</span><span class="identifier-syntax">s</span><span class="plain-syntax">][</span><span class="identifier-syntax">p</span><span class="plain-syntax">][</span><span class="identifier-syntax">n</span><span class="plain-syntax">] !=</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vt</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">modal_auxiliary_usage</span><span class="plain-syntax">[</span><span class="identifier-syntax">t</span><span class="plain-syntax">][</span><span class="identifier-syntax">s</span><span class="plain-syntax">][</span><span class="identifier-syntax">p</span><span class="plain-syntax">][</span><span class="identifier-syntax">n</span><span class="plain-syntax">]) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="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>
@ -167,23 +168,24 @@ English it looks wasteful, since so many forms are the same, but for French
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">mood_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</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">WordAssemblages::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">PASSIVE_MOOD</span><span class="plain-syntax">].</span><span class="element-syntax">to_be_auxiliary</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">mood_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</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">mood</span><span class="plain-syntax">, </span><span class="identifier-syntax">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="identifier-syntax">person</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">mood</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">mood</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">mood_count</span><span class="plain-syntax">; </span><span class="identifier-syntax">mood</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sense</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">sense</span><span class="plain-syntax">&lt;2; </span><span class="identifier-syntax">sense</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">mood</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">mood</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">mood_count</span><span class="plain-syntax">; </span><span class="identifier-syntax">mood</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">sense</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">sense</span><span class="plain-syntax">&lt;</span><span class="constant-syntax">NO_KNOWN_SENSES</span><span class="plain-syntax">; </span><span class="identifier-syntax">sense</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">mood</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Active "</span><span class="plain-syntax">); </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Passive "</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">sense</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"positive^"</span><span class="plain-syntax">); </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"negative^"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tense</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">tense</span><span class="plain-syntax">&lt;7; </span><span class="identifier-syntax">tense</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">tense</span><span class="plain-syntax">&lt;</span><span class="constant-syntax">NO_KNOWN_TENSES</span><span class="plain-syntax">; </span><span class="identifier-syntax">tense</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Tense %d: "</span><span class="plain-syntax">, </span><span class="identifier-syntax">tense</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">person</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">person</span><span class="plain-syntax">&lt;6; </span><span class="identifier-syntax">person</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wa</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">mood</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="element-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">person</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">PASSIVE_MOOD</span><span class="plain-syntax">].</span><span class="element-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">person</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">person</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" / "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">WordAssemblages::nonempty</span><span class="plain-syntax">(*</span><span class="identifier-syntax">wa</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%A"</span><span class="plain-syntax">, </span><span class="identifier-syntax">wa</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"--"</span><span class="plain-syntax">);</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">person</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">n</span><span class="plain-syntax">&lt;</span><span class="constant-syntax">NO_KNOWN_NUMBERS</span><span class="plain-syntax">; </span><span class="identifier-syntax">n</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">p</span><span class="plain-syntax">&lt;</span><span class="constant-syntax">NO_KNOWN_PERSONS</span><span class="plain-syntax">; </span><span class="identifier-syntax">p</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wa</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">mood</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="element-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">p</span><span class="plain-syntax">][</span><span class="identifier-syntax">n</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">PASSIVE_MOOD</span><span class="plain-syntax">].</span><span class="element-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">p</span><span class="plain-syntax">][</span><span class="identifier-syntax">n</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">person</span><span class="plain-syntax">++ &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" / "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">WordAssemblages::nonempty</span><span class="plain-syntax">(*</span><span class="identifier-syntax">wa</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%A"</span><span class="plain-syntax">, </span><span class="identifier-syntax">wa</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"--"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"^"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
@ -295,15 +297,15 @@ anybody else try this one on.)
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">to_be_auxiliary</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::lit_0</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">PASSIVE_MOOD</span><span class="plain-syntax">].</span><span class="element-syntax">to_be_auxiliary</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::lit_0</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">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="identifier-syntax">sense</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tense</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">tense</span><span class="plain-syntax">&lt;</span><span class="constant-syntax">NO_KNOWN_TENSES</span><span class="plain-syntax">; </span><span class="identifier-syntax">tense</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sense</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">sense</span><span class="plain-syntax">&lt;2; </span><span class="identifier-syntax">sense</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;6; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="element-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">i</span><span class="plain-syntax">] =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WordAssemblages::lit_0</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">PASSIVE_MOOD</span><span class="plain-syntax">].</span><span class="element-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">i</span><span class="plain-syntax">] =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WordAssemblages::lit_0</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">t</span><span class="plain-syntax">&lt;</span><span class="constant-syntax">NO_KNOWN_TENSES</span><span class="plain-syntax">; </span><span class="identifier-syntax">t</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">s</span><span class="plain-syntax">&lt;</span><span class="constant-syntax">NO_KNOWN_SENSES</span><span class="plain-syntax">; </span><span class="identifier-syntax">s</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">n</span><span class="plain-syntax">&lt;</span><span class="constant-syntax">NO_KNOWN_NUMBERS</span><span class="plain-syntax">; </span><span class="identifier-syntax">n</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">p</span><span class="plain-syntax">&lt;</span><span class="constant-syntax">NO_KNOWN_PERSONS</span><span class="plain-syntax">; </span><span class="identifier-syntax">p</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="element-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">t</span><span class="plain-syntax">][</span><span class="identifier-syntax">s</span><span class="plain-syntax">][</span><span class="identifier-syntax">p</span><span class="plain-syntax">][</span><span class="identifier-syntax">n</span><span class="plain-syntax">] =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WordAssemblages::lit_0</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">PASSIVE_MOOD</span><span class="plain-syntax">].</span><span class="element-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">t</span><span class="plain-syntax">][</span><span class="identifier-syntax">s</span><span class="plain-syntax">][</span><span class="identifier-syntax">p</span><span class="plain-syntax">][</span><span class="identifier-syntax">n</span><span class="plain-syntax">] =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WordAssemblages::lit_0</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-vc.html#SP6_3">&#167;6.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_3_2"></a><b>&#167;6.3.2. </b>A tabulation is a sort of program laying out what to put in which slots,
@ -325,8 +327,7 @@ rest. (The selector is always just a single token.)
<span class="plain-syntax"> </span><span class="identifier-syntax">production_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pl</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tabulation</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">first_pl</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next_pl</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">nl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">definition_language</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">production</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pr</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">first_pr</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next_pr</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">production</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">first_pr</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next_pr</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">selector</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">line</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">selector</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">selector</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next_pt</span><span class="plain-syntax">):</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">selector</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">selector</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">ptoken_category</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FIXED_WORD_PTC</span><span class="plain-syntax">) &amp;&amp;</span>
@ -348,34 +349,36 @@ rest. (The selector is always just a single token.)
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">set_tba</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">PASSIVE_MOOD</span><span class="plain-syntax">].</span><span class="element-syntax">to_be_auxiliary</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="3-vc.html#SP9" class="function-link"><span class="function-syntax">Conjugation::merge</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">MAX_FORM_TYPES</span><span class="plain-syntax">+1, </span><span class="identifier-syntax">verb_forms</span><span class="plain-syntax">, </span><span class="identifier-syntax">nl</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-vc.html#SP9" class="function-link"><span class="function-syntax">Conjugation::merge</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="constant-syntax">POSITIVE_SENSE</span><span class="plain-syntax">, </span><span class="constant-syntax">IS_TENSE</span><span class="plain-syntax">, </span><span class="constant-syntax">FIRST_PERSON</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="constant-syntax">SINGULAR_NUMBER</span><span class="plain-syntax">, </span><span class="constant-syntax">MAX_FORM_TYPES</span><span class="plain-syntax">+1, </span><span class="identifier-syntax">verb_forms</span><span class="plain-syntax">, </span><span class="identifier-syntax">nl</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">tense</span><span class="plain-syntax">&lt;</span><span class="constant-syntax">NO_KNOWN_TENSES</span><span class="plain-syntax">; </span><span class="identifier-syntax">tense</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">sense</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">sense</span><span class="plain-syntax">&lt;2; </span><span class="identifier-syntax">sense</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">person</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">person</span><span class="plain-syntax">&lt;6; </span><span class="identifier-syntax">person</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">sense_set</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">sense</span><span class="plain-syntax"> != </span><span class="identifier-syntax">sense_set</span><span class="plain-syntax">)) </span><span class="reserved-syntax">continue</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">tense_set</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">tense</span><span class="plain-syntax"> != </span><span class="identifier-syntax">tense_set</span><span class="plain-syntax">)) </span><span class="reserved-syntax">continue</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">active_set</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-vc.html#SP6_3_2_1_1" class="named-paragraph-link"><span class="named-paragraph">Apply to the active mood</span><span class="named-paragraph-number">6.3.2.1.1</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-vc.html#SP6_3_2_1_2" class="named-paragraph-link"><span class="named-paragraph">Apply to the passive mood</span><span class="named-paragraph-number">6.3.2.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">sense</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">sense</span><span class="plain-syntax">&lt;</span><span class="constant-syntax">NO_KNOWN_SENSES</span><span class="plain-syntax">; </span><span class="identifier-syntax">sense</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">n</span><span class="plain-syntax">&lt;</span><span class="constant-syntax">NO_KNOWN_NUMBERS</span><span class="plain-syntax">; </span><span class="identifier-syntax">n</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">p</span><span class="plain-syntax">&lt;</span><span class="constant-syntax">NO_KNOWN_PERSONS</span><span class="plain-syntax">; </span><span class="identifier-syntax">p</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">sense_set</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">sense</span><span class="plain-syntax"> != </span><span class="identifier-syntax">sense_set</span><span class="plain-syntax">)) </span><span class="reserved-syntax">continue</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">tense_set</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">tense</span><span class="plain-syntax"> != </span><span class="identifier-syntax">tense_set</span><span class="plain-syntax">)) </span><span class="reserved-syntax">continue</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">active_set</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-vc.html#SP6_3_2_1_1" class="named-paragraph-link"><span class="named-paragraph">Apply to the active mood</span><span class="named-paragraph-number">6.3.2.1.1</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-vc.html#SP6_3_2_1_2" class="named-paragraph-link"><span class="named-paragraph">Apply to the passive mood</span><span class="named-paragraph-number">6.3.2.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-vc.html#SP6_3_2">&#167;6.3.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_3_2_1_1"></a><b>&#167;6.3.2.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Apply to the active mood</span><span class="named-paragraph-number">6.3.2.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">person</span><span class="plain-syntax">] =</span>
<span class="plain-syntax"> </span><a href="3-vc.html#SP9" class="function-link"><span class="function-syntax">Conjugation::merge</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="identifier-syntax">person</span><span class="plain-syntax">, </span><span class="constant-syntax">MAX_FORM_TYPES</span><span class="plain-syntax">+1, </span><span class="identifier-syntax">verb_forms</span><span class="plain-syntax">, </span><span class="identifier-syntax">nl</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="element-syntax">modal_auxiliary_usage</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">person</span><span class="plain-syntax">]));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">p</span><span class="plain-syntax">][</span><span class="identifier-syntax">n</span><span class="plain-syntax">] =</span>
<span class="plain-syntax"> </span><a href="3-vc.html#SP9" class="function-link"><span class="function-syntax">Conjugation::merge</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">, </span><span class="constant-syntax">MAX_FORM_TYPES</span><span class="plain-syntax">+1, </span><span class="identifier-syntax">verb_forms</span><span class="plain-syntax">, </span><span class="identifier-syntax">nl</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="element-syntax">modal_auxiliary_usage</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">p</span><span class="plain-syntax">][</span><span class="identifier-syntax">n</span><span class="plain-syntax">]));</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-vc.html#SP6_3_2_1">&#167;6.3.2.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_3_2_1_2"></a><b>&#167;6.3.2.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Apply to the passive mood</span><span class="named-paragraph-number">6.3.2.1.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">PASSIVE_MOOD</span><span class="plain-syntax">].</span><span class="element-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">person</span><span class="plain-syntax">] =</span>
<span class="plain-syntax"> </span><a href="3-vc.html#SP9" class="function-link"><span class="function-syntax">Conjugation::merge</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="identifier-syntax">person</span><span class="plain-syntax">, </span><span class="constant-syntax">MAX_FORM_TYPES</span><span class="plain-syntax">+1, </span><span class="identifier-syntax">verb_forms</span><span class="plain-syntax">, </span><span class="identifier-syntax">nl</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">PASSIVE_MOOD</span><span class="plain-syntax">].</span><span class="element-syntax">modal_auxiliary_usage</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">person</span><span class="plain-syntax">]));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">PASSIVE_MOOD</span><span class="plain-syntax">].</span><span class="element-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">p</span><span class="plain-syntax">][</span><span class="identifier-syntax">n</span><span class="plain-syntax">] =</span>
<span class="plain-syntax"> </span><a href="3-vc.html#SP9" class="function-link"><span class="function-syntax">Conjugation::merge</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">, </span><span class="constant-syntax">MAX_FORM_TYPES</span><span class="plain-syntax">+1, </span><span class="identifier-syntax">verb_forms</span><span class="plain-syntax">, </span><span class="identifier-syntax">nl</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">PASSIVE_MOOD</span><span class="plain-syntax">].</span><span class="element-syntax">modal_auxiliary_usage</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">p</span><span class="plain-syntax">][</span><span class="identifier-syntax">n</span><span class="plain-syntax">]));</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-vc.html#SP6_3_2_1">&#167;6.3.2.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_3_2_1_3"></a><b>&#167;6.3.2.1.3. </b>The selector tells us which tense(s), sense(s) and mood(s) to apply the
@ -420,7 +423,7 @@ values representing verbs in story files compiled by Inform.
<span class="plain-syntax"> </span><span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Hierarchy::package</span><span class="plain-syntax">(</span><span class="identifier-syntax">Modules::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">where_vc_created</span><span class="plain-syntax">), </span><span class="identifier-syntax">MVERBS_HAP</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">ANT</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">ANT</span><span class="plain-syntax">, </span><span class="string-syntax">"%A (modal)"</span><span class="plain-syntax">, &amp;(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="element-syntax">vc_text</span><span class="plain-syntax">[0][0][2]));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">ANT</span><span class="plain-syntax">, </span><span class="string-syntax">"%A (modal)"</span><span class="plain-syntax">, &amp;(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="element-syntax">vc_text</span><span class="plain-syntax">[</span><span class="constant-syntax">IS_TENSE</span><span class="plain-syntax">][</span><span class="constant-syntax">POSITIVE_SENSE</span><span class="plain-syntax">][</span><span class="constant-syntax">THIRD_PERSON</span><span class="plain-syntax">]));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Hierarchy::markup</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">MVERB_NAME_HMD</span><span class="plain-syntax">, </span><span class="identifier-syntax">ANT</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">ANT</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vc_iname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Hierarchy::make_iname_in</span><span class="plain-syntax">(</span><span class="identifier-syntax">MODAL_CONJUGATION_FN_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">);</span>
@ -663,7 +666,7 @@ a different verb's conjugation "lifting".
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="function-syntax">Conjugation::merge</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Conjugation::merge</span></span>:<br/><a href="3-vc.html#SP6_3_2_1">&#167;6.3.2.1</a>, <a href="3-vc.html#SP6_3_2_1_1">&#167;6.3.2.1.1</a>, <a href="3-vc.html#SP6_3_2_1_2">&#167;6.3.2.1.2</a>, <a href="3-vc.html#SP9_2">&#167;9.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">row</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">sense</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">person</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">num_ingredients</span><span class="plain-syntax">, </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ingredients</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">sense</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">person</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">num_ingredients</span><span class="plain-syntax">, </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ingredients</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nl</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">modal_following</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">modal_following</span><span class="plain-syntax">) { *</span><span class="identifier-syntax">modal_following</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::lit_0</span><span class="plain-syntax">();</span>
@ -714,9 +717,9 @@ make use of the same fancy features we're allowing here.
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">production</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pr</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">first_pr</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next_pr</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax"> == </span><span class="identifier-syntax">person</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax"> == </span><span class="identifier-syntax">number</span><span class="plain-syntax">*3 + </span><span class="identifier-syntax">person</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::join</span><span class="plain-syntax">(</span><span class="identifier-syntax">wa</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="3-vc.html#SP9" class="function-link"><span class="function-syntax">Conjugation::merge</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">, </span><span class="identifier-syntax">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="identifier-syntax">person</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="3-vc.html#SP9" class="function-link"><span class="function-syntax">Conjugation::merge</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">, </span><span class="identifier-syntax">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="identifier-syntax">person</span><span class="plain-syntax">, </span><span class="identifier-syntax">number</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">num_ingredients</span><span class="plain-syntax">, </span><span class="identifier-syntax">ingredients</span><span class="plain-syntax">, </span><span class="identifier-syntax">nl</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> }</span>
@ -794,7 +797,7 @@ make use of the numbered verb forms if we want it to.
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax">: </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::join</span><span class="plain-syntax">(</span><span class="identifier-syntax">wa</span><span class="plain-syntax">, </span><span class="identifier-syntax">aux</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">present_participle</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span><span class="plain-syntax">: </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::join</span><span class="plain-syntax">(</span><span class="identifier-syntax">wa</span><span class="plain-syntax">, </span><span class="identifier-syntax">aux</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">past_participle</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> -1: </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::join</span><span class="plain-syntax">(</span><span class="identifier-syntax">wa</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">aux</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="element-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">T</span><span class="plain-syntax">][</span><span class="identifier-syntax">S</span><span class="plain-syntax">][</span><span class="identifier-syntax">person</span><span class="plain-syntax">]); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">aux</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tabulations</span><span class="plain-syntax">[</span><span class="constant-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="element-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">T</span><span class="plain-syntax">][</span><span class="identifier-syntax">S</span><span class="plain-syntax">][</span><span class="identifier-syntax">person</span><span class="plain-syntax">][</span><span class="identifier-syntax">number</span><span class="plain-syntax">]); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span><span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"only parts 1, 2, 3 can be extracted"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>

View file

@ -127,7 +127,7 @@ instance of the following:
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">linguistic_stock_item</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure linguistic_stock_item is accessed in 2/adj, 2/art, 2/prn and here.</li></ul>
<ul class="endnotetexts"><li>The structure linguistic_stock_item is accessed in 2/adj, 2/art, 2/prn, 3/vrb and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP6"></a><b>&#167;6. </b>A flat array is maintained of the entire stock, so that they can be efficiently
looked up by their allocation numbers:
</p>
@ -208,11 +208,11 @@ The "plus 1" is so that a reference ID of zeri can mean "no item".
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="function-syntax">Stock::to_lcon</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Stock::to_lcon</span></span>:<br/>Articles - <a href="2-art.html#SP3">&#167;3</a><br/>Pronouns - <a href="2-prn.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">linguistic_stock_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">item</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="function-syntax">Stock::to_lcon</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Stock::to_lcon</span></span>:<br/>Articles - <a href="2-art.html#SP3">&#167;3</a><br/>Pronouns - <a href="2-prn.html#SP3">&#167;3</a><br/>Verbs - <a href="3-vrb.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">linguistic_stock_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">item</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">Lcon::of_id</span><span class="plain-syntax">(1 + </span><span class="identifier-syntax">item</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">linguistic_stock_item</span><span class="plain-syntax"> *</span><span class="function-syntax">Stock::from_lcon</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Stock::from_lcon</span></span>:<br/>Adjectives - <a href="2-adj.html#SP2">&#167;2</a><br/>Articles - <a href="2-art.html#SP3">&#167;3</a><br/>Pronouns - <a href="2-prn.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">linguistic_stock_item</span><span class="plain-syntax"> *</span><span class="function-syntax">Stock::from_lcon</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Stock::from_lcon</span></span>:<br/>Adjectives - <a href="2-adj.html#SP2">&#167;2</a><br/>Articles - <a href="2-art.html#SP3">&#167;3</a><br/>Pronouns - <a href="2-prn.html#SP3">&#167;3</a><br/>Verbs - <a href="3-vrb.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lcon::get_id</span><span class="plain-syntax">(</span><span class="identifier-syntax">l</span><span class="plain-syntax">) - </span><span class="constant-syntax">1</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">id</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">id</span><span class="plain-syntax"> &gt;= </span><span class="identifier-syntax">flat_array_of_stock_extent</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">flat_array_of_stock</span><span class="plain-syntax">[</span><span class="identifier-syntax">id</span><span class="plain-syntax">];</span>

View file

@ -133,15 +133,8 @@ is an enumeration.
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Articles::write_lcon</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Articles::write_lcon</span></span>:<br/>Diagrams - <a href="4-dgr.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">lcon</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">article</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><a href="2-art.html#SP3" class="function-link"><span class="function-syntax">Articles::from_lcon</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">lcon</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" %S "</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Lcon::get_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">lcon</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SINGULAR_NUMBER:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"s"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PLURAL_NUMBER:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Lcon::get_gender</span><span class="plain-syntax">(</span><span class="identifier-syntax">lcon</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NEUTER_GENDER:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"(n)"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MASCULINE_GENDER:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"(m)"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">FEMININE_GENDER:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"(f)"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Lcon::write_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lcon::get_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">lcon</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Lcon::write_gender</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lcon::get_gender</span><span class="plain-syntax">(</span><span class="identifier-syntax">lcon</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4"></a><b>&#167;4. English articles. </b>A small subterfuge is used here for efficiency's sake. In principle we should

View file

@ -138,20 +138,9 @@ is an enumeration.
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Pronouns::write_lcon</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Pronouns::write_lcon</span></span>:<br/>Diagrams - <a href="4-dgr.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">lcon</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">pronoun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><a href="2-prn.html#SP3" class="function-link"><span class="function-syntax">Pronouns::from_lcon</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">lcon</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" %S "</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Lcon::get_person</span><span class="plain-syntax">(</span><span class="identifier-syntax">lcon</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">FIRST_PERSON:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"1p"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SECOND_PERSON:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"2p"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">THIRD_PERSON:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"3p"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Lcon::get_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">lcon</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SINGULAR_NUMBER:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"s"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PLURAL_NUMBER:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Lcon::get_gender</span><span class="plain-syntax">(</span><span class="identifier-syntax">lcon</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NEUTER_GENDER:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"(n)"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MASCULINE_GENDER:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"(m)"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">FEMININE_GENDER:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"(f)"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Lcon::write_person</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lcon::get_person</span><span class="plain-syntax">(</span><span class="identifier-syntax">lcon</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Lcon::write_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lcon::get_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">lcon</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Lcon::write_gender</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lcon::get_gender</span><span class="plain-syntax">(</span><span class="identifier-syntax">lcon</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4"></a><b>&#167;4. English pronouns. </b>Rather than giving pronouns declensions as if they were nouns, we store their

View file

@ -139,7 +139,7 @@ time".
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">": &lt;invalid-units&gt;"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tense</span><span class="plain-syntax"> != </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">": "</span><span class="plain-syntax">); </span><span class="identifier-syntax">Lcon::log_tense_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">tp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tense</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">":"</span><span class="plain-syntax">); </span><span class="identifier-syntax">Lcon::write_tense</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">tp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tense</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&gt;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>

View file

@ -92,7 +92,7 @@ will vary depending on the verb it's coupled with.
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">preposition</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">prep_text</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prep_lex_entry</span><span class="plain-syntax">; </span><span class="comment-syntax"> for use when indexing</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prep_lex_entry</span><span class="plain-syntax">; </span><span class="comment-syntax"> for use when indexing</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">where_prep_created</span><span class="plain-syntax">; </span><span class="comment-syntax"> for use if problem messages needed</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">allow_unexpected_upper_case</span><span class="plain-syntax">; </span><span class="comment-syntax"> for preps like "in Cahoots With"</span>
@ -140,7 +140,7 @@ to one verb is the same preposition as the "for" attached to another one.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">preposition</span><span class="plain-syntax"> *</span><span class="function-syntax">Prepositions::make</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Prepositions::make</span></span>:<br/>Verb Usages - <a href="3-vu.html#SP7_1">&#167;7.1</a>, <a href="3-vu.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">unexpected_upper_casing_used</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">preposition</span><span class="plain-syntax"> *</span><span class="function-syntax">Prepositions::make</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Prepositions::make</span></span>:<br/>Verb Usages - <a href="3-vu.html#SP6_1">&#167;6.1</a>, <a href="3-vu.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">unexpected_upper_casing_used</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">preposition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prep</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">prep</span><span class="plain-syntax">, </span><span class="reserved-syntax">preposition</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">WordAssemblages::eq</span><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">prep</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">prep_text</span><span class="plain-syntax">), &amp;</span><span class="identifier-syntax">wa</span><span class="plain-syntax">))</span>

View file

@ -88,7 +88,7 @@ to ask for a reversal to be performed when needed.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="function-syntax">VerbMeanings::reverse_VMT</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">VerbMeanings::reverse_VMT</span></span>:<br/><a href="3-vm.html#SP11">&#167;11</a><br/>Verb Usages - <a href="3-vu.html#SP13">&#167;13</a><br/>Noun Phrases - <a href="4-np.html#SP14_1">&#167;14.1</a><br/>Verb Phrases - <a href="4-vp.html#SP9_1">&#167;9.1</a></span></button><span class="plain-syntax">(</span><span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">recto</span><span class="plain-syntax">) {</span>
<span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="function-syntax">VerbMeanings::reverse_VMT</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">VerbMeanings::reverse_VMT</span></span>:<br/><a href="3-vm.html#SP11">&#167;11</a><br/>Verb Usages - <a href="3-vu.html#SP12">&#167;12</a><br/>Noun Phrases - <a href="4-np.html#SP14_1">&#167;14.1</a><br/>Verb Phrases - <a href="4-vp.html#SP9_1">&#167;9.1</a></span></button><span class="plain-syntax">(</span><span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">recto</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">VERB_MEANING_REVERSAL_LINGUISTICS_CALLBACK</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">VERB_MEANING_REVERSAL_LINGUISTICS_CALLBACK</span><span class="plain-syntax">(</span><span class="identifier-syntax">recto</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
@ -183,7 +183,7 @@ usages "is liking" and "is liked by" automatically change with it.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> </span><span class="function-syntax">VerbMeanings::indirected</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">VerbMeanings::indirected</span></span>:<br/>Verb Usages - <a href="3-vu.html#SP7_1">&#167;7.1</a>, <a href="3-vu.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">reversed</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> </span><span class="function-syntax">VerbMeanings::indirected</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">VerbMeanings::indirected</span></span>:<br/>Verb Usages - <a href="3-vu.html#SP6_1">&#167;6.1</a>, <a href="3-vu.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">reversed</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> </span><span class="identifier-syntax">vm</span><span class="plain-syntax"> = </span><a href="3-vm.html#SP5" class="function-link"><span class="function-syntax">VerbMeanings::meaninglessness</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vm</span><span class="plain-syntax">.</span><span class="element-syntax">take_meaning_reversed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">reversed</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vm</span><span class="plain-syntax">.</span><span class="element-syntax">take_meaning_from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">from</span><span class="plain-syntax">;</span>
@ -245,7 +245,7 @@ have to follow any indirection, and reverse if necessary.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">rel</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="function-syntax">VerbMeanings::get_regular_meaning_of_form</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">VerbMeanings::get_regular_meaning_of_form</span></span>:<br/>Verb Usages - <a href="3-vu.html#SP13">&#167;13</a><br/>Noun Phrases - <a href="4-np.html#SP14_1">&#167;14.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_form</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vf</span><span class="plain-syntax">) {</span>
<span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="function-syntax">VerbMeanings::get_regular_meaning_of_form</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">VerbMeanings::get_regular_meaning_of_form</span></span>:<br/>Verb Usages - <a href="3-vu.html#SP12">&#167;12</a><br/>Noun Phrases - <a href="4-np.html#SP14_1">&#167;14.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_form</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vf</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-vm.html#SP11" class="function-link"><span class="function-syntax">VerbMeanings::get_regular_meaning</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><a href="3-vm.html#SP9" class="function-link"><span class="function-syntax">VerbMeanings::first_unspecial_meaning_of_verb_form</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vf</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>

View file

@ -69,7 +69,7 @@ function togglePopup(material_id) {
<ul class="toc"><li><a href="3-vrb.html#SP1">&#167;1. Verb Identities</a></li><li><a href="3-vrb.html#SP5">&#167;5. Operator Verbs</a></li><li><a href="3-vrb.html#SP6">&#167;6. Verb Forms</a></li><li><a href="3-vrb.html#SP10">&#167;10. Verb senses</a></li><li><a href="3-vrb.html#SP11">&#167;11. Creating forms and senses</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1"></a><b>&#167;1. Verb Identities. </b>What is a verb? Are the verbs in "Peter is hungry" and "Jane will be in the
Dining Room" the same? How about in "Donald Trump lies on television" and
Dining Room" the same? How about in "Donald Trump lies on the television" and
"My cat Donald lies on the television"? This isn't so easy to answer.
</p>
@ -107,6 +107,16 @@ usages in a sentence.
<span class="plain-syntax"> </span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_verb</span><span class="plain-syntax">(</span><span class="identifier-syntax">data</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-vrb.html#SP4" class="function-link"><span class="function-syntax">Verbs::log_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">DL</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="function-syntax">Verbs::from_lcon</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Verbs::from_lcon</span></span>:<br/>Verb Usages - <a href="3-vu.html#SP12">&#167;12</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">lcon</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">linguistic_stock_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">item</span><span class="plain-syntax"> = </span><a href="1-sc.html#SP8" class="function-link"><span class="function-syntax">Stock::from_lcon</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">lcon</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">item</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">RETRIEVE_POINTER_verb</span><span class="plain-syntax">(</span><span class="identifier-syntax">item</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">data</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="function-syntax">Verbs::to_lcon</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Verbs::to_lcon</span></span>:<br/>Verb Usages - <a href="3-vu.html#SP7_1_2_1">&#167;7.1.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">v</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="1-sc.html#SP8" class="function-link"><span class="function-syntax">Stock::to_lcon</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">v</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">in_stock</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3"></a><b>&#167;3. </b>Note also that every verb always has a bare form, where no prepositions are
combined with it. This is (initially) meaningless, but it always exists.
@ -120,7 +130,7 @@ instead of a word: for example, the <span class="extract"><span class="extract-s
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">copular_verb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="function-syntax">Verbs::new_verb</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Verbs::new_verb</span></span>:<br/><a href="3-vrb.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">verb_conjugation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cop</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="function-syntax">Verbs::new_verb</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Verbs::new_verb</span></span>:<br/><a href="3-vrb.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">verb_conjugation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cop</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">verb</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">conjugation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vc</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">first_form</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
@ -158,7 +168,7 @@ to be the definitive copular verb.
<p class="commentary firstcommentary"><a id="SP4"></a><b>&#167;4. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Verbs::log_verb</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Verbs::log_verb</span></span>:<br/><a href="3-vrb.html#SP2">&#167;2</a><br/>Linguistics Module - <a href="1-lm.html#SP3_2">&#167;3.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vvi</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Verbs::log_verb</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Verbs::log_verb</span></span>:<br/><a href="3-vrb.html#SP2">&#167;2</a><br/>Linguistics Module - <a href="1-lm.html#SP3_2">&#167;3.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vvi</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">vvi</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">V</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) { </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;no-V&gt;"</span><span class="plain-syntax">); }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
@ -245,7 +255,7 @@ form usages can be legal for the same form, this is a bitmap:
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">grammatical_category</span><span class="plain-syntax"> *</span><span class="identifier-syntax">verb_forms_category</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Verbs::create_forms_category</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Verbs::create_forms_category</span></span>:<br/>Stock Control - <a href="1-sc.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Verbs::create_forms_category</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Verbs::create_forms_category</span></span>:<br/>Stock Control - <a href="1-sc.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">verb_forms_category</span><span class="plain-syntax"> = </span><a href="1-sc.html#SP3" class="function-link"><span class="function-syntax">Stock::new_category</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"verb_form"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">verb_forms_category</span><span class="plain-syntax">, </span><span class="constant-syntax">LOG_GRAMMATICAL_CATEGORY_MTID</span><span class="plain-syntax">, </span><a href="3-vrb.html#SP9" class="function-link"><span class="function-syntax">Verbs::log_form_item</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
@ -283,7 +293,7 @@ of verb and two prepositions:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">verb_form</span><span class="plain-syntax"> *</span><span class="function-syntax">Verbs::base_form</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Verbs::base_form</span></span>:<br/>Verb Meanings - <a href="3-vm.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">verb_form</span><span class="plain-syntax"> *</span><span class="function-syntax">Verbs::base_form</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">Verbs::base_form</span></span>:<br/>Verb Meanings - <a href="3-vm.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">V</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">verb_form</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">first_form</span><span class="plain-syntax">; </span><span class="identifier-syntax">vf</span><span class="plain-syntax">; </span><span class="identifier-syntax">vf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_form</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">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">preposition</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">second_clause_preposition</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">))</span>
@ -291,7 +301,7 @@ of verb and two prepositions:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">verb_form</span><span class="plain-syntax"> *</span><span class="function-syntax">Verbs::find_form</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Verbs::find_form</span></span>:<br/><a href="3-vrb.html#SP12_1">&#167;12.1</a><br/>Verb Usages - <a href="3-vu.html#SP13">&#167;13</a><br/>Noun Phrases - <a href="4-np.html#SP14_1">&#167;14.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="reserved-syntax">preposition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prep</span><span class="plain-syntax">, </span><span class="reserved-syntax">preposition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">second_prep</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">verb_form</span><span class="plain-syntax"> *</span><span class="function-syntax">Verbs::find_form</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Verbs::find_form</span></span>:<br/><a href="3-vrb.html#SP12_1">&#167;12.1</a><br/>Verb Usages - <a href="3-vu.html#SP12">&#167;12</a><br/>Noun Phrases - <a href="4-np.html#SP14_1">&#167;14.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="reserved-syntax">preposition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prep</span><span class="plain-syntax">, </span><span class="reserved-syntax">preposition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">second_prep</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">V</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">verb_form</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">first_form</span><span class="plain-syntax">; </span><span class="identifier-syntax">vf</span><span class="plain-syntax">; </span><span class="identifier-syntax">vf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_form</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">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">preposition</span><span class="plain-syntax"> == </span><span class="identifier-syntax">prep</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">second_clause_preposition</span><span class="plain-syntax"> == </span><span class="identifier-syntax">second_prep</span><span class="plain-syntax">))</span>
@ -303,7 +313,7 @@ of verb and two prepositions:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Verbs::add_form</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">Verbs::add_form</span></span>:<br/><a href="3-vrb.html#SP3_1">&#167;3.1</a>, <a href="3-vrb.html#SP5">&#167;5</a><br/>Verb Usages - <a href="3-vu.html#SP7_1">&#167;7.1</a>, <a href="3-vu.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="reserved-syntax">preposition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prep</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Verbs::add_form</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Verbs::add_form</span></span>:<br/><a href="3-vrb.html#SP3_1">&#167;3.1</a>, <a href="3-vrb.html#SP5">&#167;5</a><br/>Verb Usages - <a href="3-vu.html#SP6_1">&#167;6.1</a>, <a href="3-vu.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="reserved-syntax">preposition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prep</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">preposition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">second_prep</span><span class="plain-syntax">, </span><span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> </span><span class="identifier-syntax">vm</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">form_structs</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-vm.html#SP5" class="function-link"><span class="function-syntax">VerbMeanings::is_meaningless</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">vm</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">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">VERB_FORMS</span><span class="plain-syntax">, </span><span class="string-syntax">" Adding form: $w + $p + $p = $y\n"</span><span class="plain-syntax">,</span>
@ -355,8 +365,9 @@ in a canonical verbal form. For example, "translate into <span class="extract"><
<span class="plain-syntax"> </span><span class="identifier-syntax">verb_conjugation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">conjugation</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">vc</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">p</span><span class="plain-syntax"> = </span><a href="3-vu.html#SP24" class="function-link"><span class="function-syntax">VerbUsages::adaptive_person</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">defined_in</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">we_form</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">][0][</span><span class="identifier-syntax">p</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">we_dont_form</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">][1][</span><span class="identifier-syntax">p</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><a href="3-vu.html#SP24" class="function-link"><span class="function-syntax">VerbUsages::adaptive_number</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">defined_in</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">we_form</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">][</span><span class="identifier-syntax">POSITIVE_SENSE</span><span class="plain-syntax">][</span><span class="identifier-syntax">p</span><span class="plain-syntax">][</span><span class="identifier-syntax">n</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">we_dont_form</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">][</span><span class="identifier-syntax">NEGATIVE_SENSE</span><span class="plain-syntax">][</span><span class="identifier-syntax">p</span><span class="plain-syntax">][</span><span class="identifier-syntax">n</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">infinitive_reference_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">infinitive</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">pos_reference_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">we_form</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">neg_reference_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">we_dont_form</span><span class="plain-syntax">;</span>

View file

@ -81,23 +81,11 @@ MathJax = {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Services</a></li><li><a href="index.html">linguistics</a></li><li><a href="index.html#3">Chapter 3: VP Categories</a></li><li><b>Verb Usages</b></li></ul></div>
<p class="purpose">To parse the many forms a verb can take.</p>
<ul class="toc"><li><a href="3-vu.html#SP3">&#167;3. Verb usages</a></li><li><a href="3-vu.html#SP5">&#167;5. Verb usage tiers</a></li><li><a href="3-vu.html#SP6">&#167;6. Registration</a></li><li><a href="3-vu.html#SP7">&#167;7. Registration of regular verbs</a></li><li><a href="3-vu.html#SP12">&#167;12. Miscellaneous utility routines</a></li><li><a href="3-vu.html#SP14">&#167;14. Parsing source text against verb usages</a></li><li><a href="3-vu.html#SP23">&#167;23. Optimisation</a></li><li><a href="3-vu.html#SP24">&#167;24. Adaptive person</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="3-vu.html#SP1">&#167;1. Verb usages</a></li><li><a href="3-vu.html#SP3">&#167;3. Verb usage tiers</a></li><li><a href="3-vu.html#SP4">&#167;4. Registration</a></li><li><a href="3-vu.html#SP6">&#167;6. Registration of regular verbs</a></li><li><a href="3-vu.html#SP11">&#167;11. Miscellaneous utility routines</a></li><li><a href="3-vu.html#SP13">&#167;13. Parsing source text against verb usages</a></li><li><a href="3-vu.html#SP23">&#167;23. Optimisation</a></li><li><a href="3-vu.html#SP24">&#167;24. Adaptive person</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1"></a><b>&#167;1. </b></p>
<pre class="definitions code-font"><span class="definition-keyword">default</span> <span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb_conjugation</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2"></a><b>&#167;2. </b>The "permitted verb" is just a piece of temporary context used in parsing:
it's convenient for the verb currently being considered to be stored in
a global variable.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">permitted_verb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3"></a><b>&#167;3. Verb usages. </b>We already have the ability to conjugate verbs &mdash; to turn "to have" into "I have",
<p class="commentary firstcommentary"><a id="SP1"></a><b>&#167;1. Verb usages. </b>We already have the ability to conjugate verbs &mdash; to turn "to have" into "I have",
"you have", "he has", "they have had", "we will have" and so on &mdash; from the
Inflections module. However, we won't necessarily want to recognise all of
<a href="../inflections-module/index.html" class="internal">inflections</a> module. However, we won't necessarily want to recognise all of
those forms in sentences in the source text. For example, Inform only looks
at present tense forms of verbs in the third person, or at imperative forms.
</p>
@ -108,21 +96,18 @@ be turned into one of the following structures:
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">grammatical_usage</span><span class="plain-syntax">; </span><span class="comment-syntax"> includes verb, mood, tense, sense</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">vu_text</span><span class="plain-syntax">; </span><span class="comment-syntax"> text to recognise</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">vu_allow_unexpected_upper_case</span><span class="plain-syntax">; </span><span class="comment-syntax"> for verbs like "to Hoover" or "to Google"</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">verb_used</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">negated_form_of_verb</span><span class="plain-syntax">; </span><span class="comment-syntax"> is this a negated form?</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">mood</span><span class="plain-syntax">; </span><span class="comment-syntax"> active/passive: one of the two </span><span class="extract"><span class="extract-syntax">*_MOOD</span></span><span class="comment-syntax"> values</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tensed</span><span class="plain-syntax">; </span><span class="comment-syntax"> one of the </span><span class="extract"><span class="extract-syntax">*_TENSE</span></span><span class="comment-syntax"> values</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">next_in_search_list</span><span class="plain-syntax">; </span><span class="comment-syntax"> within a linked list of all usages in length order</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">next_within_tier</span><span class="plain-syntax">; </span><span class="comment-syntax"> within the linked list for this tier (see below)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">where_vu_created</span><span class="plain-syntax">; </span><span class="comment-syntax"> for use if problem messages needed</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">linguistic_stock_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">in_stock</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu_lex_entry</span><span class="plain-syntax">; </span><span class="comment-syntax"> for use when indexing</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu_lex_entry</span><span class="plain-syntax">; </span><span class="comment-syntax"> for use when indexing</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">where_vu_created</span><span class="plain-syntax">; </span><span class="comment-syntax"> for use if problem messages needed</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">next_in_search_list</span><span class="plain-syntax">; </span><span class="comment-syntax"> within a linked list of all usages in length order</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">next_within_tier</span><span class="plain-syntax">; </span><span class="comment-syntax"> within the linked list for this tier (see below)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax">;</span>
@ -130,7 +115,7 @@ be turned into one of the following structures:
<span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">negated_to_be</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> "is not"</span>
</pre>
<ul class="endnotetexts"><li>The structure verb_usage is accessed in 2/adj, 2/art, 2/daq, 2/nns, 2/prn, 3/vrb, 3/prp, 4/vp and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP4"></a><b>&#167;4. </b>One simple search list arranges these in order of (word count) length:
<p class="commentary firstcommentary"><a id="SP2"></a><b>&#167;2. </b>One simple search list arranges these in order of (word count) length:
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -139,7 +124,7 @@ be turned into one of the following structures:
<span class="definition-keyword">define</span> <span class="identifier-syntax">LOOP_OVER_USAGES</span><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">vu</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vu_search_list</span><span class="plain-syntax">; </span><span class="identifier-syntax">vu</span><span class="plain-syntax">; </span><span class="identifier-syntax">vu</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_in_search_list</span><span class="plain-syntax">)</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5"></a><b>&#167;5. Verb usage tiers. </b>A particular challenge of parsing natural language is to decide the most likely
<p class="commentary firstcommentary"><a id="SP3"></a><b>&#167;3. Verb usage tiers. </b>A particular challenge of parsing natural language is to decide the most likely
word in a sentence to be its primary verb. (The verb in "Heatwave Bone Breaks
Clog Hospital" is not "to break".) This is especially challenging when the
noun phrases can't be understood since they refer to things not yet created.
@ -170,37 +155,35 @@ the earlier one in the sentence is preferred.
<span class="reserved-syntax">verb_usage_tier</span><span class="plain-syntax"> *</span><span class="identifier-syntax">first_search_tier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> head of linked list of tiers</span>
</pre>
<ul class="endnotetexts"><li>The structure verb_usage_tier is accessed in 4/vp and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP6"></a><b>&#167;6. Registration. </b>Here we create a single verb usage; note that the empty text cannot be used.
<p class="commentary firstcommentary"><a id="SP4"></a><b>&#167;4. Registration. </b>Here we create a single verb usage; note that the empty text cannot be used.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">set_where_created</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="function-syntax">VerbUsages::register_single_usage</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">VerbUsages::register_single_usage</span></span>:<br/><a href="3-vu.html#SP8_1_2_1">&#167;8.1.2.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">negated</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</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">mood</span><span class="plain-syntax">, </span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vi</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">unexpected_upper_casing_used</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="function-syntax">VerbUsages::register_single_usage</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">VerbUsages::register_single_usage</span></span>:<br/><a href="3-vu.html#SP7_1_2_1">&#167;7.1.2.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</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">unexpected_upper_casing_used</span><span class="plain-syntax">, </span><span class="identifier-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">semantics</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">WordAssemblages::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">wa</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">VERB_USAGES</span><span class="plain-syntax">, </span><span class="string-syntax">"new usage: '%A'\n"</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">wa</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-vu.html#SP23" class="function-link"><span class="function-syntax">VerbUsages::mark_as_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">WordAssemblages::first_word</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">wa</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vu_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">wa</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">negated_form_of_verb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">negated</span><span class="plain-syntax">; </span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tensed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tense</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vu_lex_entry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">current_main_verb</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">where_vu_created</span><span class="plain-syntax"> = </span><span class="identifier-syntax">set_where_created</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">verb_used</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vi</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">mood</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mood</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">grammatical_usage</span><span class="plain-syntax"> = </span><span class="identifier-syntax">semantics</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vu_allow_unexpected_upper_case</span><span class="plain-syntax"> = </span><span class="identifier-syntax">unexpected_upper_casing_used</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_within_tier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_in_search_list</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-vu.html#SP6_1" class="named-paragraph-link"><span class="named-paragraph">Add to the length-order search list</span><span class="named-paragraph-number">6.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-vu.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Add to the length-order search list</span><span class="named-paragraph-number">4.1</span></a></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">vu</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6_1"></a><b>&#167;6.1. </b>These are insertion-sorted into a list in order of word count, with oldest
<p class="commentary firstcommentary"><a id="SP4_1"></a><b>&#167;4.1. </b>These are insertion-sorted into a list in order of word count, with oldest
first in the case of equal length:
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Add to the length-order search list</span><span class="named-paragraph-number">6.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Add to the length-order search list</span><span class="named-paragraph-number">4.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -220,8 +203,22 @@ first in the case of equal length:
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-vu.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7"></a><b>&#167;7. Registration of regular verbs. </b>It would be tiresome to have to call the above routine for every possible
<ul class="endnotetexts"><li>This code is used in <a href="3-vu.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5"></a><b>&#167;5. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::write</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu</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">vu</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) { </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"(null verb usage)"</span><span class="plain-syntax">); </span><span class="reserved-syntax">return</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"vu: %A"</span><span class="plain-syntax">, &amp;(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vu_text</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">grammatical_usage</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Lcon::write_sense</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lcon::get_sense</span><span class="plain-syntax">(</span><span class="identifier-syntax">l</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Lcon::write_mood</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lcon::get_mood</span><span class="plain-syntax">(</span><span class="identifier-syntax">l</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Lcon::write_tense</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lcon::get_tense</span><span class="plain-syntax">(</span><span class="identifier-syntax">l</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Lcon::write_person</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lcon::get_person</span><span class="plain-syntax">(</span><span class="identifier-syntax">l</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Lcon::write_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lcon::get_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">l</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6"></a><b>&#167;6. Registration of regular verbs. </b>It would be tiresome to have to call the above routine for every possible
conjugated form of a verb individually, so the following takes care of
a whole verb at once.
</p>
@ -241,17 +238,17 @@ equivalent to "X is 1".
<span class="plain-syntax"> </span><span class="identifier-syntax">IndexLexicon::new_main_verb</span><span class="plain-syntax">(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">infinitive</span><span class="plain-syntax">, </span><span class="identifier-syntax">VERB_LEXE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> </span><a href="3-vu.html#SP8" class="function-link"><span class="function-syntax">VerbUsages::register_moods_of_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">, </span><span class="identifier-syntax">vi</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="3-vu.html#SP7" class="function-link"><span class="function-syntax">VerbUsages::register_moods_of_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">, </span><span class="identifier-syntax">vi</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">unexpected_upper_casing_used</span><span class="plain-syntax">, </span><span class="identifier-syntax">priority</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">vi</span><span class="plain-syntax"> != </span><span class="identifier-syntax">copular_verb</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="3-vu.html#SP8" class="function-link"><span class="function-syntax">VerbUsages::register_moods_of_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="identifier-syntax">PASSIVE_MOOD</span><span class="plain-syntax">, </span><span class="identifier-syntax">vi</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="3-vu.html#SP7" class="function-link"><span class="function-syntax">VerbUsages::register_moods_of_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="identifier-syntax">PASSIVE_MOOD</span><span class="plain-syntax">, </span><span class="identifier-syntax">vi</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">unexpected_upper_casing_used</span><span class="plain-syntax">, </span><span class="identifier-syntax">priority</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-vu.html#SP7_1" class="named-paragraph-link"><span class="named-paragraph">Add present participle forms</span><span class="named-paragraph-number">7.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-vu.html#SP6_1" class="named-paragraph-link"><span class="named-paragraph">Add present participle forms</span><span class="named-paragraph-number">6.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7_1"></a><b>&#167;7.1. </b>With the present participle the meaning is back the right way around: for
<p class="commentary firstcommentary"><a id="SP6_1"></a><b>&#167;6.1. </b>With the present participle the meaning is back the right way around: for
instance, "to be fetching" has the same meaning as "to fetch". At any rate,
Inform's linguistic model is not subtle enough to distinguish the difference,
in terms of a continuous rather than instantaneous process, which a human
@ -264,7 +261,7 @@ best sense we could make of it, and "He is being in the Dining Room" has
an unfortunate mock-Indian sound to it.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Add present participle forms</span><span class="named-paragraph-number">7.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Add present participle forms</span><span class="named-paragraph-number">6.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -275,8 +272,8 @@ an unfortunate mock-Indian sound to it.
<span class="plain-syntax"> </span><a href="3-vm.html#SP7" class="function-link"><span class="function-syntax">VerbMeanings::indirected</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vi</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">), </span><span class="constant-syntax">SVO_FS_BIT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-vu.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8"></a><b>&#167;8. </b>Note that forms using the auxiliary "to be" are given meanings which indirect
<ul class="endnotetexts"><li>This code is used in <a href="3-vu.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7"></a><b>&#167;7. </b>Note that forms using the auxiliary "to be" are given meanings which indirect
to the meanings of the main verb: thus "Y is owned by X" is indirected to
the reversal of the meaning "X owns Y", and "X is owning Y" to the unreversed
meaning. Both forms are then internally implemented as prepositional forms
@ -284,7 +281,7 @@ of "to be", which is convenient however dubious in linguistic terms.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::register_moods_of_verb</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">VerbUsages::register_moods_of_verb</span></span>:<br/><a href="3-vu.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">verb_conjugation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">mood</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::register_moods_of_verb</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">VerbUsages::register_moods_of_verb</span></span>:<br/><a href="3-vu.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">verb_conjugation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">mood</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vi</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">unexpected_upper_casing_used</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">priority</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">verb_tabulation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vt</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">mood</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">WordAssemblages::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">vt</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">to_be_auxiliary</span><span class="plain-syntax">)) {</span>
@ -295,10 +292,10 @@ of "to be", which is convenient however dubious in linguistic terms.
<span class="plain-syntax"> </span><span class="constant-syntax">SVO_FS_BIT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-vu.html#SP8_1" class="named-paragraph-link"><span class="named-paragraph">Register usages</span><span class="named-paragraph-number">8.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-vu.html#SP7_1" class="named-paragraph-link"><span class="named-paragraph">Register usages</span><span class="named-paragraph-number">7.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8_1"></a><b>&#167;8.1. </b>The sequence of registration is important here, and it's done this way to
<p class="commentary firstcommentary"><a id="SP7_1"></a><b>&#167;7.1. </b>The sequence of registration is important here, and it's done this way to
minimise false readings due to overlaps. We take future or other exotic
tenses (say, the French past historic) first; then the perfect tenses,
then the imperfect; within that, we take negated forms first, then positive;
@ -306,97 +303,102 @@ within that, we take present before past tense; within that, we run through
the persons from 1PS to 3PP.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Register usages</span><span class="named-paragraph-number">8.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Register usages</span><span class="named-paragraph-number">7.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WILLBE_TENSE</span><span class="plain-syntax">; </span><span class="identifier-syntax">tense</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">NO_KNOWN_TENSES</span><span class="plain-syntax">; </span><span class="identifier-syntax">tense</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">sense</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="identifier-syntax">sense</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">sense</span><span class="plain-syntax">--)</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-vu.html#SP8_1_2" class="named-paragraph-link"><span class="named-paragraph">Register usages in this combination</span><span class="named-paragraph-number">8.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-vu.html#SP7_1_2" class="named-paragraph-link"><span class="named-paragraph">Register usages in this combination</span><span class="named-paragraph-number">7.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t1</span><span class="plain-syntax"> = </span><span class="identifier-syntax">HASBEEN_TENSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">t2</span><span class="plain-syntax"> = </span><span class="identifier-syntax">HADBEEN_TENSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-vu.html#SP8_1_1" class="named-paragraph-link"><span class="named-paragraph">Register usages in these tenses</span><span class="named-paragraph-number">8.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-vu.html#SP7_1_1" class="named-paragraph-link"><span class="named-paragraph">Register usages in these tenses</span><span class="named-paragraph-number">7.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">t1</span><span class="plain-syntax"> = </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">; </span><span class="identifier-syntax">t2</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WAS_TENSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-vu.html#SP8_1_1" class="named-paragraph-link"><span class="named-paragraph">Register usages in these tenses</span><span class="named-paragraph-number">8.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-vu.html#SP7_1_1" class="named-paragraph-link"><span class="named-paragraph">Register usages in these tenses</span><span class="named-paragraph-number">7.1.1</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-vu.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_1_1"></a><b>&#167;8.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Register usages in these tenses</span><span class="named-paragraph-number">8.1.1</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-vu.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_1_1"></a><b>&#167;7.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Register usages in these tenses</span><span class="named-paragraph-number">7.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">sense</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="identifier-syntax">sense</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">sense</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">tense</span><span class="plain-syntax"> = </span><span class="identifier-syntax">t1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-vu.html#SP8_1_2" class="named-paragraph-link"><span class="named-paragraph">Register usages in this combination</span><span class="named-paragraph-number">8.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-vu.html#SP7_1_2" class="named-paragraph-link"><span class="named-paragraph">Register usages in this combination</span><span class="named-paragraph-number">7.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax"> = </span><span class="identifier-syntax">t2</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-vu.html#SP8_1_2" class="named-paragraph-link"><span class="named-paragraph">Register usages in this combination</span><span class="named-paragraph-number">8.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-vu.html#SP7_1_2" class="named-paragraph-link"><span class="named-paragraph">Register usages in this combination</span><span class="named-paragraph-number">7.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-vu.html#SP8_1">&#167;8.1</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP8_1_2"></a><b>&#167;8.1.2. </b>Note that before a usage is registered, we call out to the client to find
<ul class="endnotetexts"><li>This code is used in <a href="3-vu.html#SP7_1">&#167;7.1</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP7_1_2"></a><b>&#167;7.1.2. </b>Note that before a usage is registered, we call out to the client to find
out whether it's needed.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Register usages in this combination</span><span class="named-paragraph-number">8.1.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Register usages in this combination</span><span class="named-paragraph-number">7.1.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">person</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">person</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">NO_KNOWN_PERSONS</span><span class="plain-syntax">; </span><span class="identifier-syntax">person</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">p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">priority</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">ALLOW_VERB_IN_ASSERTIONS_LINGUISTICS_CALLBACK</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ALLOW_VERB_IN_ASSERTIONS_LINGUISTICS_CALLBACK</span><span class="plain-syntax">(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="identifier-syntax">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">person</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">p</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> #</span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-vu.html#SP9" class="function-link"><span class="function-syntax">VerbUsages::allow_in_assertions</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="identifier-syntax">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">person</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">p</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">ALLOW_VERB_LINGUISTICS_CALLBACK</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ALLOW_VERB_LINGUISTICS_CALLBACK</span><span class="plain-syntax">(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="identifier-syntax">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">person</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">p</span><span class="plain-syntax"> = -1;</span>
<span class="plain-syntax"> #</span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-vu.html#SP10" class="function-link"><span class="function-syntax">VerbUsages::allow_generally</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="identifier-syntax">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">person</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">p</span><span class="plain-syntax"> = -1;</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">p</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-vu.html#SP8_1_2_1" class="named-paragraph-link"><span class="named-paragraph">Actually register this usage</span><span class="named-paragraph-number">8.1.2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">number</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">NO_KNOWN_NUMBERS</span><span class="plain-syntax">; </span><span class="identifier-syntax">number</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">person</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">person</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">NO_KNOWN_PERSONS</span><span class="plain-syntax">; </span><span class="identifier-syntax">person</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">p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">priority</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">ALLOW_VERB_IN_ASSERTIONS_LINGUISTICS_CALLBACK</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ALLOW_VERB_IN_ASSERTIONS_LINGUISTICS_CALLBACK</span><span class="plain-syntax">(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="identifier-syntax">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">person</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">p</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> #</span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-vu.html#SP8" class="function-link"><span class="function-syntax">VerbUsages::allow_in_assertions</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="identifier-syntax">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">person</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">p</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">ALLOW_VERB_LINGUISTICS_CALLBACK</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ALLOW_VERB_LINGUISTICS_CALLBACK</span><span class="plain-syntax">(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="identifier-syntax">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">person</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">p</span><span class="plain-syntax"> = -1;</span>
<span class="plain-syntax"> #</span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-vu.html#SP9" class="function-link"><span class="function-syntax">VerbUsages::allow_generally</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="identifier-syntax">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">person</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">p</span><span class="plain-syntax"> = -1;</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">p</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-vu.html#SP7_1_2_1" class="named-paragraph-link"><span class="named-paragraph">Actually register this usage</span><span class="named-paragraph-number">7.1.2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-vu.html#SP8_1">&#167;8.1</a>, <a href="3-vu.html#SP8_1_1">&#167;8.1.1</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP8_1_2_1"></a><b>&#167;8.1.2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Actually register this usage</span><span class="named-paragraph-number">8.1.2.1</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-vu.html#SP7_1">&#167;7.1</a>, <a href="3-vu.html#SP7_1_1">&#167;7.1.1</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP7_1_2_1"></a><b>&#167;7.1.2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Actually register this usage</span><span class="named-paragraph-number">7.1.2.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu</span><span class="plain-syntax"> = </span><a href="3-vu.html#SP6" class="function-link"><span class="function-syntax">VerbUsages::register_single_usage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vt</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">person</span><span class="plain-syntax">],</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">sense</span><span class="plain-syntax">==1)?</span><span class="identifier-syntax">TRUE:FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="identifier-syntax">mood</span><span class="plain-syntax">, </span><span class="identifier-syntax">vi</span><span class="plain-syntax">, </span><span class="identifier-syntax">unexpected_upper_casing_used</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">vu</span><span class="plain-syntax">) </span><a href="3-vu.html#SP11" class="function-link"><span class="function-syntax">VerbUsages::set_search_priority</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax"> = </span><a href="3-vrb.html#SP2" class="function-link"><span class="function-syntax">Verbs::to_lcon</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vi</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lcon::set_mood</span><span class="plain-syntax">(</span><span class="identifier-syntax">l</span><span class="plain-syntax">, </span><span class="identifier-syntax">mood</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lcon::set_tense</span><span class="plain-syntax">(</span><span class="identifier-syntax">l</span><span class="plain-syntax">, </span><span class="identifier-syntax">tense</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lcon::set_sense</span><span class="plain-syntax">(</span><span class="identifier-syntax">l</span><span class="plain-syntax">, </span><span class="identifier-syntax">sense</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lcon::set_person</span><span class="plain-syntax">(</span><span class="identifier-syntax">l</span><span class="plain-syntax">, </span><span class="identifier-syntax">person</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lcon::set_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">l</span><span class="plain-syntax">, </span><span class="identifier-syntax">number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu</span><span class="plain-syntax"> = </span><a href="3-vu.html#SP4" class="function-link"><span class="function-syntax">VerbUsages::register_single_usage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vt</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">person</span><span class="plain-syntax">][</span><span class="identifier-syntax">number</span><span class="plain-syntax">],</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">unexpected_upper_casing_used</span><span class="plain-syntax">, </span><span class="identifier-syntax">l</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">vu</span><span class="plain-syntax">) </span><a href="3-vu.html#SP10" class="function-link"><span class="function-syntax">VerbUsages::set_search_priority</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">vi</span><span class="plain-syntax"> == </span><span class="identifier-syntax">copular_verb</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">tense</span><span class="plain-syntax"> == </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">person</span><span class="plain-syntax"> == </span><span class="identifier-syntax">THIRD_PERSON_SINGULAR</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">tense</span><span class="plain-syntax"> == </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">person</span><span class="plain-syntax"> == </span><span class="identifier-syntax">THIRD_PERSON</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">number</span><span class="plain-syntax"> == </span><span class="identifier-syntax">SINGULAR_NUMBER</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">sense</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">negated_to_be</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vu</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">regular_to_be</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vu</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-vu.html#SP8_1_2">&#167;8.1.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9"></a><b>&#167;9. </b>Here are the default decisions on what usages are allowed; the defaults are
<ul class="endnotetexts"><li>This code is used in <a href="3-vu.html#SP7_1_2">&#167;7.1.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8"></a><b>&#167;8. </b>Here are the default decisions on what usages are allowed; the defaults are
what are used by Inform. In assertions:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::allow_in_assertions</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">VerbUsages::allow_in_assertions</span></span>:<br/><a href="3-vu.html#SP8_1_2">&#167;8.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">verb_conjugation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">sense</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">person</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">tense</span><span class="plain-syntax"> == </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">sense</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> ((</span><span class="identifier-syntax">person</span><span class="plain-syntax"> == </span><span class="identifier-syntax">THIRD_PERSON_SINGULAR</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">person</span><span class="plain-syntax"> == </span><span class="identifier-syntax">THIRD_PERSON_PLURAL</span><span class="plain-syntax">)))</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::allow_in_assertions</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">VerbUsages::allow_in_assertions</span></span>:<br/><a href="3-vu.html#SP7_1_2">&#167;7.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">verb_conjugation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">sense</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">person</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">tense</span><span class="plain-syntax"> == </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">sense</span><span class="plain-syntax"> == </span><span class="identifier-syntax">POSITIVE_SENSE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">person</span><span class="plain-syntax"> == </span><span class="identifier-syntax">THIRD_PERSON</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><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>
<p class="commentary firstcommentary"><a id="SP10"></a><b>&#167;10. </b>And in other usages (e.g., in Inform's "now the pink door is not open"):
<p class="commentary firstcommentary"><a id="SP9"></a><b>&#167;9. </b>And in other usages (e.g., in Inform's "now the pink door is not open"):
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::allow_generally</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">VerbUsages::allow_generally</span></span>:<br/><a href="3-vu.html#SP8_1_2">&#167;8.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">verb_conjugation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">sense</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">person</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::allow_generally</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">VerbUsages::allow_generally</span></span>:<br/><a href="3-vu.html#SP7_1_2">&#167;7.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">verb_conjugation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">sense</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">person</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">tense</span><span class="plain-syntax"> == </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">tense</span><span class="plain-syntax"> == </span><span class="identifier-syntax">WAS_TENSE</span><span class="plain-syntax">) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">tense</span><span class="plain-syntax"> == </span><span class="identifier-syntax">HASBEEN_TENSE</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">tense</span><span class="plain-syntax"> == </span><span class="identifier-syntax">HADBEEN_TENSE</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> ((</span><span class="identifier-syntax">person</span><span class="plain-syntax"> == </span><span class="identifier-syntax">THIRD_PERSON_SINGULAR</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">person</span><span class="plain-syntax"> == </span><span class="identifier-syntax">THIRD_PERSON_PLURAL</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">tense</span><span class="plain-syntax"> == </span><span class="identifier-syntax">HASBEEN_TENSE</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">tense</span><span class="plain-syntax"> == </span><span class="identifier-syntax">HADBEEN_TENSE</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">person</span><span class="plain-syntax"> == </span><span class="identifier-syntax">THIRD_PERSON</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><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>
<p class="commentary firstcommentary"><a id="SP11"></a><b>&#167;11. </b>That just leaves the business of setting the "priority" of a usage. As
<p class="commentary firstcommentary"><a id="SP10"></a><b>&#167;10. </b>That just leaves the business of setting the "priority" of a usage. As
noted above, priority 0 usages are ignored, while otherwise low numbers
beat high ones. For example, in "The verb to be means the equality relation",
the verb "be" might have priority 2 and so be beaten by the verb "mean",
@ -409,12 +411,12 @@ list, with lower priority numbers before higher ones.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::set_search_priority</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">VerbUsages::set_search_priority</span></span>:<br/><a href="3-vu.html#SP8_1_2_1">&#167;8.1.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::set_search_priority</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">VerbUsages::set_search_priority</span></span>:<br/><a href="3-vu.html#SP7_1_2_1">&#167;7.1.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">verb_usage_tier</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">first_search_tier</span><span class="plain-syntax">, *</span><span class="identifier-syntax">last_tier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">VERB_USAGES</span><span class="plain-syntax">, </span><span class="string-syntax">"Usage '%A' has priority %d\n"</span><span class="plain-syntax">, &amp;(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vu_text</span><span class="plain-syntax">), </span><span class="identifier-syntax">p</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">tier</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">tier</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">priority</span><span class="plain-syntax"> &lt;= </span><span class="identifier-syntax">p</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">tier</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">priority</span><span class="plain-syntax"> == </span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="3-vu.html#SP11" class="function-link"><span class="function-syntax">VerbUsages::add_to_tier</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">, </span><span class="identifier-syntax">tier</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-vu.html#SP10" class="function-link"><span class="function-syntax">VerbUsages::add_to_tier</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">, </span><span class="identifier-syntax">tier</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">last_tier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tier</span><span class="plain-syntax">;</span>
@ -423,7 +425,7 @@ list, with lower priority numbers before higher ones.
<span class="plain-syntax"> </span><span class="identifier-syntax">tier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">verb_usage_tier</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tier</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">priority</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tier</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tier_contents</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="3-vu.html#SP11" class="function-link"><span class="function-syntax">VerbUsages::add_to_tier</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">, </span><span class="identifier-syntax">tier</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-vu.html#SP10" class="function-link"><span class="function-syntax">VerbUsages::add_to_tier</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">, </span><span class="identifier-syntax">tier</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">last_tier</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tier</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_tier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">last_tier</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_tier</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">last_tier</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_tier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tier</span><span class="plain-syntax">;</span>
@ -442,40 +444,51 @@ list, with lower priority numbers before higher ones.
<span class="plain-syntax"> </span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_within_tier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP12"></a><b>&#167;12. Miscellaneous utility routines. </b>A usage is "foreign" if it belongs to a language other than English:
<p class="commentary firstcommentary"><a id="SP11"></a><b>&#167;11. Miscellaneous utility routines. </b>A usage is "foreign" if it belongs to a language other than English:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::is_foreign</span><span class="plain-syntax">(</span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu</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">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">verb_used</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">verb_used</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">conjugation</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">defined_in</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">verb_used</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">conjugation</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">defined_in</span><span class="plain-syntax"> != </span><span class="identifier-syntax">DefaultLanguage::get</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">v</span><span class="plain-syntax"> = </span><a href="3-vu.html#SP12" class="function-link"><span class="function-syntax">VerbUsages::get_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vu</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">v</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">v</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">conjugation</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">defined_in</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">v</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">conjugation</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">defined_in</span><span class="plain-syntax"> != </span><span class="identifier-syntax">DefaultLanguage::get</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="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="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>
<p class="commentary firstcommentary"><a id="SP13"></a><b>&#167;13. </b>And some access routines.
<p class="commentary firstcommentary"><a id="SP12"></a><b>&#167;12. </b>And some access routines.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="function-syntax">VerbUsages::get_regular_meaning</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">VerbUsages::get_regular_meaning</span></span>:<br/><a href="3-vu.html#SP18">&#167;18</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu</span><span class="plain-syntax">, </span><span class="reserved-syntax">preposition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prep</span><span class="plain-syntax">, </span><span class="reserved-syntax">preposition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">second_prep</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">vu</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">root</span><span class="plain-syntax"> = </span><a href="3-vm.html#SP11" class="function-link"><span class="function-syntax">VerbMeanings::get_regular_meaning_of_form</span></a><span class="plain-syntax">(</span><a href="3-vrb.html#SP11" class="function-link"><span class="function-syntax">Verbs::find_form</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">verb_used</span><span class="plain-syntax">, </span><span class="identifier-syntax">prep</span><span class="plain-syntax">, </span><span class="identifier-syntax">second_prep</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">root</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">mood</span><span class="plain-syntax"> == </span><span class="identifier-syntax">PASSIVE_MOOD</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">root</span><span class="plain-syntax"> != </span><span class="identifier-syntax">VERB_MEANING_EQUALITY</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">root</span><span class="plain-syntax"> = </span><a href="3-vm.html#SP11" class="function-link"><span class="function-syntax">VerbMeanings::get_regular_meaning_of_form</span></a><span class="plain-syntax">(</span><a href="3-vrb.html#SP11" class="function-link"><span class="function-syntax">Verbs::find_form</span></a><span class="plain-syntax">(</span><a href="3-vu.html#SP12" class="function-link"><span class="function-syntax">VerbUsages::get_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">), </span><span class="identifier-syntax">prep</span><span class="plain-syntax">, </span><span class="identifier-syntax">second_prep</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">root</span><span class="plain-syntax">) &amp;&amp; (</span><a href="3-vu.html#SP12" class="function-link"><span class="function-syntax">VerbUsages::get_mood</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">) == </span><span class="identifier-syntax">PASSIVE_MOOD</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">root</span><span class="plain-syntax"> != </span><span class="identifier-syntax">VERB_MEANING_EQUALITY</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">root</span><span class="plain-syntax"> = </span><a href="3-vm.html#SP2" class="function-link"><span class="function-syntax">VerbMeanings::reverse_VMT</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">root</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">root</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::get_tense_used</span><span class="plain-syntax">(</span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu</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">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tensed</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="function-syntax">VerbUsages::get_verb</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">VerbUsages::get_verb</span></span>:<br/><a href="3-vu.html#SP11">&#167;11</a>, <a href="3-vu.html#SP15">&#167;15</a>, <a href="3-vu.html#SP16">&#167;16</a>, <a href="3-vu.html#SP17">&#167;17</a><br/>Verb Phrases - <a href="4-vp.html#SP7_3_1">&#167;7.3.1</a>, <a href="4-vp.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu</span><span class="plain-syntax">) {</span>
<span class="comment-syntax"> if (vu) return vu-&gt;verb_used;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">vu</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-vrb.html#SP2" class="function-link"><span class="function-syntax">Verbs::from_lcon</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">grammatical_usage</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::is_used_negatively</span><span class="plain-syntax">(</span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu</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">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">negated_form_of_verb</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::get_mood</span><span class="plain-syntax">(</span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu</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">Lcon::get_mood</span><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">grammatical_usage</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::get_tense_used</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">VerbUsages::get_tense_used</span></span>:<br/><a href="3-vu.html#SP17">&#167;17</a>, <a href="3-vu.html#SP20">&#167;20</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu</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">Lcon::get_tense</span><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">grammatical_usage</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::is_used_negatively</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">VerbUsages::is_used_negatively</span></span>:<br/><a href="3-vu.html#SP17">&#167;17</a>, <a href="3-vu.html#SP19">&#167;19</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu</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">Lcon::get_sense</span><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">grammatical_usage</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NEGATIVE_SENSE</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP14"></a><b>&#167;14. Parsing source text against verb usages. </b>Given a particular VU, and a word range <span class="extract"><span class="extract-syntax">w1</span></span> to <span class="extract"><span class="extract-syntax">w2</span></span>, we test whether the
<p class="commentary firstcommentary"><a id="SP13"></a><b>&#167;13. Parsing source text against verb usages. </b>Given a particular VU, and a word range <span class="extract"><span class="extract-syntax">w1</span></span> to <span class="extract"><span class="extract-syntax">w2</span></span>, we test whether the
range begins with but does not consist only of the text of the VU. We return
the first word after the VU text if it does (which will therefore be a
word number still inside the range), or \(-1\) if it doesn't.
@ -487,12 +500,20 @@ confine ourselves to words flagged in the vocabulary as being used in verbs.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::parse_against_verb</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">VerbUsages::parse_against_verb</span></span>:<br/><a href="3-vu.html#SP15">&#167;15</a>, <a href="3-vu.html#SP16">&#167;16</a>, <a href="3-vu.html#SP17">&#167;17</a>, <a href="3-vu.html#SP18">&#167;18</a>, <a href="3-vu.html#SP19">&#167;19</a>, <a href="3-vu.html#SP20">&#167;20</a><br/>Verb Phrases - <a href="4-vp.html#SP7_3_1">&#167;7.3.1</a></span></button><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="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::parse_against_verb</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">VerbUsages::parse_against_verb</span></span>:<br/><a href="3-vu.html#SP15">&#167;15</a>, <a href="3-vu.html#SP16">&#167;16</a>, <a href="3-vu.html#SP17">&#167;17</a>, <a href="3-vu.html#SP18">&#167;18</a>, <a href="3-vu.html#SP19">&#167;19</a>, <a href="3-vu.html#SP20">&#167;20</a><br/>Verb Phrases - <a href="4-vp.html#SP7_3_1">&#167;7.3.1</a></span></button><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="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu</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">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vu_allow_unexpected_upper_case</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Word::unexpectedly_upper_case</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="reserved-syntax">return</span><span class="plain-syntax"> -1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">WordAssemblages::parse_as_strictly_initial_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, &amp;(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vu_text</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP14"></a><b>&#167;14. </b>The "permitted verb" is just a piece of temporary context used in parsing:
it's convenient for the verb currently being considered to be stored in
a global variable.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">permitted_verb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP15"></a><b>&#167;15. </b>We now define a whole run of internals to parse verbs. As examples,
</p>
@ -524,16 +545,16 @@ which has a meaning.
<span class="Preform-function-syntax">&lt;meaningful-nonimperative-verb&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-constant-syntax">{</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">verb_usage</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">vu</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">LOOP_OVER_USAGES</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vu</span><span class="Preform-plain-syntax">) {</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">verb</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">vi</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">vu</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">verb_used</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">verb</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">vi</span><span class="Preform-plain-syntax"> = </span><a href="3-vu.html#SP12" class="function-link"><span class="Preform-function-syntax">VerbUsages::get_verb</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vu</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">for</span><span class="Preform-plain-syntax"> (</span><span class="Preform-reserved-syntax">verb_form</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">vf</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">vi</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-identifier-syntax">first_form</span><span class="Preform-plain-syntax">; </span><span class="Preform-identifier-syntax">vf</span><span class="Preform-plain-syntax">; </span><span class="Preform-identifier-syntax">vf</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">vf</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">next_form</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><a href="3-vm.html#SP5" class="function-link"><span class="Preform-function-syntax">VerbMeanings::is_meaningless</span></a><span class="Preform-plain-syntax">(&amp;(</span><span class="Preform-identifier-syntax">vf</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">list_of_senses</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">vm</span><span class="Preform-plain-syntax">)) == </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">) &amp;&amp;</span>
<span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">vf</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">form_structures</span><span class="Preform-plain-syntax"> &amp; (</span><span class="Preform-constant-syntax">SVO_FS_BIT</span><span class="Preform-plain-syntax"> + </span><span class="Preform-constant-syntax">SVOO_FS_BIT</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">i</span><span class="Preform-plain-syntax"> = </span><a href="3-vu.html#SP14" class="function-link"><span class="Preform-function-syntax">VerbUsages::parse_against_verb</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">vu</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">i</span><span class="Preform-plain-syntax"> = </span><a href="3-vu.html#SP13" class="function-link"><span class="Preform-function-syntax">VerbUsages::parse_against_verb</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">vu</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">i</span><span class="Preform-plain-syntax">&gt;</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">)) &amp;&amp; (</span><span class="Preform-identifier-syntax">i</span><span class="Preform-plain-syntax">&lt;=</span><span class="Preform-identifier-syntax">Wordings::last_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">if</span><span class="Preform-plain-syntax"> ((</span><span class="Preform-identifier-syntax">vf</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">preposition</span><span class="Preform-plain-syntax"> == </span><span class="Preform-identifier-syntax">NULL</span><span class="Preform-plain-syntax">) ||</span>
<span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">WordAssemblages::is_at</span><span class="Preform-plain-syntax">(&amp;(</span><span class="Preform-identifier-syntax">vf</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">preposition</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">prep_text</span><span class="Preform-plain-syntax">), </span><span class="Preform-identifier-syntax">i</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">Wordings::last_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-identifier-syntax">XP</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">vu</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">permitted_verb</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">vu</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">verb_used</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">permitted_verb</span><span class="Preform-plain-syntax"> = </span><a href="3-vu.html#SP12" class="function-link"><span class="Preform-function-syntax">VerbUsages::get_verb</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vu</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">i</span><span class="Preform-plain-syntax">-1;</span>
<span class="Preform-plain-syntax"> }</span>
<span class="Preform-plain-syntax"> }</span>
@ -553,8 +574,8 @@ and so on.
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">verb_usage</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">vu</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">preform_backtrack</span><span class="Preform-plain-syntax">) { </span><span class="Preform-identifier-syntax">vu</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">preform_backtrack</span><span class="Preform-plain-syntax">; </span><span class="Preform-reserved-syntax">goto</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">BacktrackFrom</span><span class="Preform-plain-syntax">; }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">LOOP_OVER_USAGES</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vu</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">vu</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">verb_used</span><span class="Preform-plain-syntax"> == </span><span class="Preform-identifier-syntax">copular_verb</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">i</span><span class="Preform-plain-syntax"> = </span><a href="3-vu.html#SP14" class="function-link"><span class="Preform-function-syntax">VerbUsages::parse_against_verb</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">vu</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><a href="3-vu.html#SP12" class="function-link"><span class="Preform-function-syntax">VerbUsages::get_verb</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vu</span><span class="Preform-plain-syntax">) == </span><span class="Preform-identifier-syntax">copular_verb</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">i</span><span class="Preform-plain-syntax"> = </span><a href="3-vu.html#SP13" class="function-link"><span class="Preform-function-syntax">VerbUsages::parse_against_verb</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">vu</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">i</span><span class="Preform-plain-syntax">&gt;</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">)) &amp;&amp; (</span><span class="Preform-identifier-syntax">i</span><span class="Preform-plain-syntax">&lt;=</span><span class="Preform-identifier-syntax">Wordings::last_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-identifier-syntax">XP</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">vu</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">i</span><span class="Preform-plain-syntax">-1);</span>
@ -576,10 +597,10 @@ not carry" qualifies; "is not" or "supports" don't qualify.
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">verb_usage</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">vu</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">preform_backtrack</span><span class="Preform-plain-syntax">) { </span><span class="Preform-identifier-syntax">vu</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">preform_backtrack</span><span class="Preform-plain-syntax">; </span><span class="Preform-reserved-syntax">goto</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">BacktrackFrom</span><span class="Preform-plain-syntax">; }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">LOOP_OVER_USAGES</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vu</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">vu</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">tensed</span><span class="Preform-plain-syntax"> == </span><span class="Preform-identifier-syntax">IS_TENSE</span><span class="Preform-plain-syntax">) &amp;&amp;</span>
<span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">vu</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">verb_used</span><span class="Preform-plain-syntax"> != </span><span class="Preform-identifier-syntax">copular_verb</span><span class="Preform-plain-syntax">) &amp;&amp;</span>
<span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">vu</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">negated_form_of_verb</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">int</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">i</span><span class="Preform-plain-syntax"> = </span><a href="3-vu.html#SP14" class="function-link"><span class="Preform-function-syntax">VerbUsages::parse_against_verb</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">vu</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><a href="3-vu.html#SP12" class="function-link"><span class="Preform-function-syntax">VerbUsages::get_tense_used</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vu</span><span class="Preform-plain-syntax">) == </span><span class="Preform-identifier-syntax">IS_TENSE</span><span class="Preform-plain-syntax">) &amp;&amp;</span>
<span class="Preform-plain-syntax"> (</span><a href="3-vu.html#SP12" class="function-link"><span class="Preform-function-syntax">VerbUsages::get_verb</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vu</span><span class="Preform-plain-syntax">) != </span><span class="Preform-identifier-syntax">copular_verb</span><span class="Preform-plain-syntax">) &amp;&amp;</span>
<span class="Preform-plain-syntax"> (</span><a href="3-vu.html#SP12" class="function-link"><span class="Preform-function-syntax">VerbUsages::is_used_negatively</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vu</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">i</span><span class="Preform-plain-syntax"> = </span><a href="3-vu.html#SP13" class="function-link"><span class="Preform-function-syntax">VerbUsages::parse_against_verb</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">vu</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">i</span><span class="Preform-plain-syntax">&gt;</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">)) &amp;&amp; (</span><span class="Preform-identifier-syntax">i</span><span class="Preform-plain-syntax">&lt;=</span><span class="Preform-identifier-syntax">Wordings::last_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-identifier-syntax">XP</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">vu</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">i</span><span class="Preform-plain-syntax">-1);</span>
@ -600,8 +621,8 @@ that means it's "to relate".
<span class="Preform-plain-syntax"> #</span><span class="Preform-identifier-syntax">ifdef</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">VERB_MEANING_UNIVERSAL</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">verb_usage</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">vu</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">LOOP_OVER_USAGES</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vu</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><a href="3-vu.html#SP13" class="function-link"><span class="Preform-function-syntax">VerbUsages::get_regular_meaning</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vu</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">NULL</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">NULL</span><span class="Preform-plain-syntax">) == </span><span class="Preform-identifier-syntax">VERB_MEANING_UNIVERSAL</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">i</span><span class="Preform-plain-syntax"> = </span><a href="3-vu.html#SP14" class="function-link"><span class="Preform-function-syntax">VerbUsages::parse_against_verb</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">vu</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><a href="3-vu.html#SP12" class="function-link"><span class="Preform-function-syntax">VerbUsages::get_regular_meaning</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vu</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">NULL</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">NULL</span><span class="Preform-plain-syntax">) == </span><span class="Preform-identifier-syntax">VERB_MEANING_UNIVERSAL</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">i</span><span class="Preform-plain-syntax"> = </span><a href="3-vu.html#SP13" class="function-link"><span class="Preform-function-syntax">VerbUsages::parse_against_verb</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">vu</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">i</span><span class="Preform-plain-syntax">&gt;</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">)) &amp;&amp; (</span><span class="Preform-identifier-syntax">i</span><span class="Preform-plain-syntax">&lt;=</span><span class="Preform-identifier-syntax">Wordings::last_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-identifier-syntax">XP</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">vu</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">i</span><span class="Preform-plain-syntax">-1;</span>
@ -620,8 +641,8 @@ that means it's "to relate".
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">verb_usage</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">vu</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">preform_backtrack</span><span class="Preform-plain-syntax">) { </span><span class="Preform-identifier-syntax">vu</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">preform_backtrack</span><span class="Preform-plain-syntax">; </span><span class="Preform-reserved-syntax">goto</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">BacktrackFrom</span><span class="Preform-plain-syntax">; }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">LOOP_OVER_USAGES</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vu</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">vu</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">negated_form_of_verb</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">int</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">i</span><span class="Preform-plain-syntax"> = </span><a href="3-vu.html#SP14" class="function-link"><span class="Preform-function-syntax">VerbUsages::parse_against_verb</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">vu</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><a href="3-vu.html#SP12" class="function-link"><span class="Preform-function-syntax">VerbUsages::is_used_negatively</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vu</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">i</span><span class="Preform-plain-syntax"> = </span><a href="3-vu.html#SP13" class="function-link"><span class="Preform-function-syntax">VerbUsages::parse_against_verb</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">vu</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">i</span><span class="Preform-plain-syntax">&gt;</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">)) &amp;&amp; (</span><span class="Preform-identifier-syntax">i</span><span class="Preform-plain-syntax">&lt;=</span><span class="Preform-identifier-syntax">Wordings::last_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-identifier-syntax">XP</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">vu</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">i</span><span class="Preform-plain-syntax">-1);</span>
@ -641,8 +662,8 @@ that means it's "to relate".
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">verb_usage</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">vu</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">preform_backtrack</span><span class="Preform-plain-syntax">) { </span><span class="Preform-identifier-syntax">vu</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">preform_backtrack</span><span class="Preform-plain-syntax">; </span><span class="Preform-reserved-syntax">goto</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">BacktrackFrom</span><span class="Preform-plain-syntax">; }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">LOOP_OVER_USAGES</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vu</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">vu</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">tensed</span><span class="Preform-plain-syntax"> != </span><span class="Preform-identifier-syntax">IS_TENSE</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">i</span><span class="Preform-plain-syntax"> = </span><a href="3-vu.html#SP14" class="function-link"><span class="Preform-function-syntax">VerbUsages::parse_against_verb</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">vu</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><a href="3-vu.html#SP12" class="function-link"><span class="Preform-function-syntax">VerbUsages::get_tense_used</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vu</span><span class="Preform-plain-syntax">) != </span><span class="Preform-identifier-syntax">IS_TENSE</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">i</span><span class="Preform-plain-syntax"> = </span><a href="3-vu.html#SP13" class="function-link"><span class="Preform-function-syntax">VerbUsages::parse_against_verb</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">vu</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">i</span><span class="Preform-plain-syntax">&gt;</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">)) &amp;&amp; (</span><span class="Preform-identifier-syntax">i</span><span class="Preform-plain-syntax">&lt;=</span><span class="Preform-identifier-syntax">Wordings::last_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-identifier-syntax">XP</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">vu</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">i</span><span class="Preform-plain-syntax">-1);</span>
@ -664,8 +685,9 @@ uses of verbs:
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">LOOP_OVER</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vc</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">verb_conjugation</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">vc</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-identifier-syntax">auxiliary_only</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">int</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">p</span><span class="Preform-plain-syntax"> = </span><a href="3-vu.html#SP24" class="function-link"><span class="Preform-function-syntax">VerbUsages::adaptive_person</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vc</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-identifier-syntax">defined_in</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">word_assemblage</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">we_form</span><span class="Preform-plain-syntax"> = &amp;(</span><span class="Preform-identifier-syntax">vc</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-identifier-syntax">tabulations</span><span class="Preform-plain-syntax">[</span><span class="Preform-identifier-syntax">ACTIVE_MOOD</span><span class="Preform-plain-syntax">].</span><span class="Preform-identifier-syntax">vc_text</span><span class="Preform-plain-syntax">[</span><span class="Preform-identifier-syntax">IS_TENSE</span><span class="Preform-plain-syntax">][0][</span><span class="Preform-identifier-syntax">p</span><span class="Preform-plain-syntax">]);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">word_assemblage</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">we_dont_form</span><span class="Preform-plain-syntax"> = &amp;(</span><span class="Preform-identifier-syntax">vc</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-identifier-syntax">tabulations</span><span class="Preform-plain-syntax">[</span><span class="Preform-identifier-syntax">ACTIVE_MOOD</span><span class="Preform-plain-syntax">].</span><span class="Preform-identifier-syntax">vc_text</span><span class="Preform-plain-syntax">[</span><span class="Preform-identifier-syntax">IS_TENSE</span><span class="Preform-plain-syntax">][1][</span><span class="Preform-identifier-syntax">p</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">n</span><span class="Preform-plain-syntax"> = </span><a href="3-vu.html#SP24" class="function-link"><span class="Preform-function-syntax">VerbUsages::adaptive_number</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vc</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-identifier-syntax">defined_in</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">word_assemblage</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">we_form</span><span class="Preform-plain-syntax"> = &amp;(</span><span class="Preform-identifier-syntax">vc</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-identifier-syntax">tabulations</span><span class="Preform-plain-syntax">[</span><span class="Preform-identifier-syntax">ACTIVE_MOOD</span><span class="Preform-plain-syntax">].</span><span class="Preform-identifier-syntax">vc_text</span><span class="Preform-plain-syntax">[</span><span class="Preform-identifier-syntax">IS_TENSE</span><span class="Preform-plain-syntax">][</span><span class="Preform-identifier-syntax">POSITIVE_SENSE</span><span class="Preform-plain-syntax">][</span><span class="Preform-identifier-syntax">p</span><span class="Preform-plain-syntax">][</span><span class="Preform-identifier-syntax">n</span><span class="Preform-plain-syntax">]);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">word_assemblage</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">we_dont_form</span><span class="Preform-plain-syntax"> = &amp;(</span><span class="Preform-identifier-syntax">vc</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-identifier-syntax">tabulations</span><span class="Preform-plain-syntax">[</span><span class="Preform-identifier-syntax">ACTIVE_MOOD</span><span class="Preform-plain-syntax">].</span><span class="Preform-identifier-syntax">vc_text</span><span class="Preform-plain-syntax">[</span><span class="Preform-identifier-syntax">IS_TENSE</span><span class="Preform-plain-syntax">][</span><span class="Preform-identifier-syntax">NEGATIVE_SENSE</span><span class="Preform-plain-syntax">][</span><span class="Preform-identifier-syntax">p</span><span class="Preform-plain-syntax">][</span><span class="Preform-identifier-syntax">n</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">WordAssemblages::compare_with_wording</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">we_form</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">XP</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">vc</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-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>
@ -729,9 +751,10 @@ or "the verb to be able to see" use these.
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">LOOP_OVER</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vc</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">verb_conjugation</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">vc</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-identifier-syntax">auxiliary_only</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">int</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">p</span><span class="Preform-plain-syntax"> = </span><a href="3-vu.html#SP24" class="function-link"><span class="Preform-function-syntax">VerbUsages::adaptive_person</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vc</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-identifier-syntax">defined_in</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">vc</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-identifier-syntax">tabulations</span><span class="Preform-plain-syntax">[</span><span class="Preform-identifier-syntax">ACTIVE_MOOD</span><span class="Preform-plain-syntax">].</span><span class="Preform-identifier-syntax">modal_auxiliary_usage</span><span class="Preform-plain-syntax">[</span><span class="Preform-identifier-syntax">IS_TENSE</span><span class="Preform-plain-syntax">][0][</span><span class="Preform-identifier-syntax">p</span><span class="Preform-plain-syntax">] != </span><span class="Preform-constant-syntax">0</span><span class="Preform-plain-syntax">) {</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">word_assemblage</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">we_form</span><span class="Preform-plain-syntax"> = &amp;(</span><span class="Preform-identifier-syntax">vc</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-identifier-syntax">tabulations</span><span class="Preform-plain-syntax">[</span><span class="Preform-identifier-syntax">ACTIVE_MOOD</span><span class="Preform-plain-syntax">].</span><span class="Preform-identifier-syntax">vc_text</span><span class="Preform-plain-syntax">[</span><span class="Preform-identifier-syntax">IS_TENSE</span><span class="Preform-plain-syntax">][0][</span><span class="Preform-identifier-syntax">p</span><span class="Preform-plain-syntax">]);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">word_assemblage</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">we_dont_form</span><span class="Preform-plain-syntax"> = &amp;(</span><span class="Preform-identifier-syntax">vc</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-identifier-syntax">tabulations</span><span class="Preform-plain-syntax">[</span><span class="Preform-identifier-syntax">ACTIVE_MOOD</span><span class="Preform-plain-syntax">].</span><span class="Preform-identifier-syntax">vc_text</span><span class="Preform-plain-syntax">[</span><span class="Preform-identifier-syntax">IS_TENSE</span><span class="Preform-plain-syntax">][1][</span><span class="Preform-identifier-syntax">p</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">n</span><span class="Preform-plain-syntax"> = </span><a href="3-vu.html#SP24" class="function-link"><span class="Preform-function-syntax">VerbUsages::adaptive_number</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">vc</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-identifier-syntax">defined_in</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">vc</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-identifier-syntax">tabulations</span><span class="Preform-plain-syntax">[</span><span class="Preform-identifier-syntax">ACTIVE_MOOD</span><span class="Preform-plain-syntax">].</span><span class="Preform-identifier-syntax">modal_auxiliary_usage</span><span class="Preform-plain-syntax">[</span><span class="Preform-identifier-syntax">IS_TENSE</span><span class="Preform-plain-syntax">][</span><span class="Preform-identifier-syntax">POSITIVE_SENSE</span><span class="Preform-plain-syntax">][</span><span class="Preform-identifier-syntax">p</span><span class="Preform-plain-syntax">][</span><span class="Preform-identifier-syntax">n</span><span class="Preform-plain-syntax">] != </span><span class="Preform-constant-syntax">0</span><span class="Preform-plain-syntax">) {</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">word_assemblage</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">we_form</span><span class="Preform-plain-syntax"> = &amp;(</span><span class="Preform-identifier-syntax">vc</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-identifier-syntax">tabulations</span><span class="Preform-plain-syntax">[</span><span class="Preform-identifier-syntax">ACTIVE_MOOD</span><span class="Preform-plain-syntax">].</span><span class="Preform-identifier-syntax">vc_text</span><span class="Preform-plain-syntax">[</span><span class="Preform-identifier-syntax">IS_TENSE</span><span class="Preform-plain-syntax">][</span><span class="Preform-identifier-syntax">POSITIVE_SENSE</span><span class="Preform-plain-syntax">][</span><span class="Preform-identifier-syntax">p</span><span class="Preform-plain-syntax">][</span><span class="Preform-identifier-syntax">n</span><span class="Preform-plain-syntax">]);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">word_assemblage</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">we_dont_form</span><span class="Preform-plain-syntax"> = &amp;(</span><span class="Preform-identifier-syntax">vc</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-identifier-syntax">tabulations</span><span class="Preform-plain-syntax">[</span><span class="Preform-identifier-syntax">ACTIVE_MOOD</span><span class="Preform-plain-syntax">].</span><span class="Preform-identifier-syntax">vc_text</span><span class="Preform-plain-syntax">[</span><span class="Preform-identifier-syntax">IS_TENSE</span><span class="Preform-plain-syntax">][</span><span class="Preform-identifier-syntax">NEGATIVE_SENSE</span><span class="Preform-plain-syntax">][</span><span class="Preform-identifier-syntax">p</span><span class="Preform-plain-syntax">][</span><span class="Preform-identifier-syntax">n</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">WordAssemblages::compare_with_wording</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">we_form</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">XP</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">vc</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-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>
@ -747,7 +770,7 @@ or "the verb to be able to see" use these.
<p class="commentary firstcommentary"><a id="SP23"></a><b>&#167;23. Optimisation. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::mark_as_verb</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">VerbUsages::mark_as_verb</span></span>:<br/><a href="3-vu.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ve</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::mark_as_verb</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">VerbUsages::mark_as_verb</span></span>:<br/><a href="3-vu.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ve</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NTI::mark_vocabulary</span><span class="plain-syntax">(</span><span class="identifier-syntax">ve</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;meaningful-nonimperative-verb&gt;</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NTI::mark_vocabulary</span><span class="plain-syntax">(</span><span class="identifier-syntax">ve</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;copular-verb&gt;</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NTI::mark_vocabulary</span><span class="plain-syntax">(</span><span class="identifier-syntax">ve</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;negated-noncopular-verb-present&gt;</span><span class="plain-syntax">);</span>
@ -756,7 +779,7 @@ or "the verb to be able to see" use these.
<span class="plain-syntax"> </span><span class="identifier-syntax">NTI::mark_vocabulary</span><span class="plain-syntax">(</span><span class="identifier-syntax">ve</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;past-tense-verb&gt;</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::preform_optimiser</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">VerbUsages::preform_optimiser</span></span>:<br/>Linguistics Module - <a href="1-lm.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::preform_optimiser</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">VerbUsages::preform_optimiser</span></span>:<br/>Linguistics Module - <a href="1-lm.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NTI::first_word_in_match_must_have_my_NTI_bit</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;meaningful-nonimperative-verb&gt;</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NTI::first_word_in_match_must_have_my_NTI_bit</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;copular-verb&gt;</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NTI::first_word_in_match_must_have_my_NTI_bit</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;negated-noncopular-verb-present&gt;</span><span class="plain-syntax">);</span>
@ -768,12 +791,20 @@ or "the verb to be able to see" use these.
<p class="commentary firstcommentary"><a id="SP24"></a><b>&#167;24. Adaptive person. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::adaptive_person</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">VerbUsages::adaptive_person</span></span>:<br/><a href="3-vu.html#SP21">&#167;21</a>, <a href="3-vu.html#SP22">&#167;22</a><br/>Verbs - <a href="3-vrb.html#SP12_1_1">&#167;12.1.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::adaptive_person</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">VerbUsages::adaptive_person</span></span>:<br/><a href="3-vu.html#SP21">&#167;21</a>, <a href="3-vu.html#SP22">&#167;22</a><br/>Verbs - <a href="3-vrb.html#SP12_1_1">&#167;12.1.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">ADAPTIVE_PERSON_LINGUISTICS_CALLBACK</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">ADAPTIVE_PERSON_LINGUISTICS_CALLBACK</span><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifndef</span><span class="plain-syntax"> </span><span class="identifier-syntax">ADAPTIVE_PERSON_LINGUISTICS_CALLBACK</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FIRST_PERSON_PLURAL</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">FIRST_PERSON</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::adaptive_number</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">VerbUsages::adaptive_number</span></span>:<br/><a href="3-vu.html#SP21">&#167;21</a>, <a href="3-vu.html#SP22">&#167;22</a><br/>Verbs - <a href="3-vrb.html#SP12_1_1">&#167;12.1.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">ADAPTIVE_NUMBER_LINGUISTICS_CALLBACK</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">ADAPTIVE_NUMBER_LINGUISTICS_CALLBACK</span><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifndef</span><span class="plain-syntax"> </span><span class="identifier-syntax">ADAPTIVE_NUMBER_LINGUISTICS_CALLBACK</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">PLURAL_NUMBER</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax">}</span>
</pre>

View file

@ -435,7 +435,7 @@ match "test... with..." because it's not at the front.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vi</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">verb_used</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vi</span><span class="plain-syntax"> = </span><a href="3-vu.html#SP12" class="function-link"><span class="function-syntax">VerbUsages::get_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vu</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">i</span><span class="plain-syntax"> = -1;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">ISW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">, </span><span class="identifier-syntax">IOW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">certainty</span><span class="plain-syntax"> = </span><span class="constant-syntax">UNKNOWN_CE</span><span class="plain-syntax">, </span><span class="identifier-syntax">pre_certainty</span><span class="plain-syntax"> = </span><span class="constant-syntax">UNKNOWN_CE</span><span class="plain-syntax">, </span><span class="identifier-syntax">post_certainty</span><span class="plain-syntax"> = </span><span class="constant-syntax">UNKNOWN_CE</span><span class="plain-syntax">;</span>
@ -443,7 +443,7 @@ match "test... with..." because it's not at the front.
<span class="plain-syntax"> </span><span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vm</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">vf</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">list_of_senses</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vm</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-vm.html#SP5" class="function-link"><span class="function-syntax">VerbMeanings::is_meaningless</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vm</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">i</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><a href="3-vu.html#SP14" class="function-link"><span class="function-syntax">VerbUsages::parse_against_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TW</span><span class="plain-syntax">, </span><span class="identifier-syntax">vu</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><a href="3-vu.html#SP13" class="function-link"><span class="function-syntax">VerbUsages::parse_against_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TW</span><span class="plain-syntax">, </span><span class="identifier-syntax">vu</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">i</span><span class="plain-syntax">&gt;</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">TW</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;=</span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">TW</span><span class="plain-syntax">)))) </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">form_structures</span><span class="plain-syntax"> &amp; (</span><span class="constant-syntax">VO_FS_BIT</span><span class="plain-syntax"> + </span><span class="constant-syntax">VOO_FS_BIT</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">pos</span><span class="plain-syntax"> &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">)) </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
@ -678,7 +678,7 @@ For example, "Darcy is proud" and "Darcy wears the hat" will both end up here.
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">ACCEPT_SMFT:</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_verb</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vsave</span><span class="plain-syntax"> = </span><span class="identifier-syntax">permitted_verb</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">permitted_verb</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">vu</span><span class="plain-syntax">)?</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">verb_used:NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">permitted_verb</span><span class="plain-syntax"> = </span><a href="3-vu.html#SP12" class="function-link"><span class="function-syntax">VerbUsages::get_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;nounphrase-as-object&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">OW</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;nounphrase-as-object&gt; failed"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">O_PN</span><span class="plain-syntax"> = </span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="plain-syntax">;</span>

View file

@ -135,7 +135,8 @@ following alphabetical list has references to fuller explanations:
<ul class="items"><li>&#9679; <span class="extract"><span class="extract-syntax">ADAPTIVE_PERSON_LINGUISTICS_CALLBACK</span></span> returns the default person for adaptive
text generation; in Inform, this tends to be the value of the adaptive text viewpoint
property for the natural language of play. See <a href="3-vu.html#SP24" class="internal">VerbUsages::adaptive_person</a>.
property for the natural language of play. Similarly, <span class="extract"><span class="extract-syntax">ADAPTIVE_NUMBER_LINGUISTICS_CALLBACK</span></span>
returns the number (singular or plural). See <a href="3-vu.html#SP24" class="internal">VerbUsages::adaptive_person</a>.
</li><li>&#9679; <span class="extract"><span class="extract-syntax">ADJECTIVE_NAME_VETTING_LINGUISTICS_CALLBACK</span></span> should return <span class="extract"><span class="extract-syntax">TRUE</span></span> if the given
name is acceptable as an adjective, and should otherwise print some sort of
error message and return <span class="extract"><span class="extract-syntax">FALSE</span></span>. If this callback is not provided, all non-empty
@ -144,7 +145,7 @@ names are acceptable. See <a href="2-adj.html#SP3" class="internal">Adjectives::
give the parent control over which forms of verbs are allowed: for examole, <a href="../core-module/index.html" class="internal">core</a>
allows them in assertions only in the third person (singular or plural), whereas
it allows them in any form in non-assertion contexts. See
<a href="3-vu.html#SP8" class="internal">VerbUsages::register_moods_of_verb</a>.
<a href="3-vu.html#SP7" class="internal">VerbUsages::register_moods_of_verb</a>.
</li><li>&#9679; <span class="extract"><span class="extract-syntax">ADJECTIVE_COMPILATION_LINGUISTICS_CALLBACK</span></span>, if provided, should accompany a
declaration of a structure called <span class="extract"><span class="extract-syntax">adjecttve_compilation_data</span></span>; this function should
then set up that data for the given adjective &mdash; see <a href="2-adj.html#SP3" class="internal">Adjectives::declare</a>.

View file

@ -67,7 +67,7 @@ function togglePopup(material_id) {
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Unit::allow_in_assertions</span><span class="plain-syntax">(</span><span class="reserved-syntax">verb_conjugation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">sense</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">person</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">person</span><span class="plain-syntax"> == </span><span class="constant-syntax">THIRD_PERSON_SINGULAR</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">person</span><span class="plain-syntax"> == </span><span class="constant-syntax">THIRD_PERSON_PLURAL</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">person</span><span class="plain-syntax"> == </span><span class="constant-syntax">THIRD_PERSON</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -164,7 +164,7 @@ any text but then fail.
<span class="plain-syntax"> </span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vi</span><span class="plain-syntax"> = </span><a href="../linguistics-module/3-vrb.html#SP3" class="function-link"><span class="function-syntax">Verbs::new_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="identifier-syntax">cop</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">my_first_verb</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vc_conjugates</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vi</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="../linguistics-module/3-vu.html#SP7" class="function-link"><span class="function-syntax">VerbUsages::register_all_usages_of_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vi</span><span class="plain-syntax">, </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;&lt;r&gt;&gt;</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../linguistics-module/3-vu.html#SP6" class="function-link"><span class="function-syntax">VerbUsages::register_all_usages_of_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vi</span><span class="plain-syntax">, </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;&lt;r&gt;&gt;</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">vc_be</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">vc_be</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vc</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">vc_have</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">vc_have</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vc</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="../linguistics-module/3-vrb.html#SP12" class="function-link"><span class="function-syntax">Verbs::add_form</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vi</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><a href="../linguistics-module/3-vm.html#SP6" class="function-link"><span class="function-syntax">VerbMeanings::regular</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">), </span><span class="constant-syntax">SVO_FS_BIT</span><span class="plain-syntax">);</span>

View file

@ -29,8 +29,8 @@ Total memory consumption was 256243K = 250 MB
0.2% dict_entry_array 236 x 100 = 23600 objects, 762752 bytes
0.2% package_request 7928 objects, 697664 bytes
0.2% inter_name_generator_array 16 x 1000 = 16000 objects, 640512 bytes
0.2% verb_usage 1628 objects, 586080 bytes
0.2% noun_usage 2405 objects, 577200 bytes
0.2% verb_usage 1628 objects, 560032 bytes
0.1% local_variable_array 45 x 100 = 4500 objects, 505440 bytes
0.1% inference_subject 663 objects, 434928 bytes
0.1% rule 469 objects, 363944 bytes
@ -46,7 +46,7 @@ Total memory consumption was 256243K = 250 MB
---- linguistic_stock_item 3312 objects, 158976 bytes
---- stacked_variable_owner_list_array 38 x 100 = 3800 objects, 153216 bytes
---- action_pattern_array 6 x 100 = 600 objects, 144192 bytes
---- lexicon_entry 395 objects, 142200 bytes
---- index_lexicon_entry 395 objects, 142200 bytes
---- nonterminal 752 objects, 138368 bytes
---- documentation_ref 1275 objects, 112200 bytes
---- hierarchy_location 731 objects, 105264 bytes
@ -224,5 +224,5 @@ Total memory consumption was 256243K = 250 MB
---- emitter array storage 14368 bytes in 8 claims
---- code generation workspace for objects 9200 bytes in 9 claims
19.9% was overhead - 52309712 bytes = 51083K = 49 MB
19.9% was overhead - 52335760 bytes = 51109K = 49 MB

View file

@ -1,29 +1,29 @@
100.0% in inform7 run
66.2% in compilation to Inter
26.7% in //Phrases::Manager::compile_first_block//
7.9% in //Phrases::Manager::compile_as_needed//
6.8% in //Strings::compile_responses//
6.0% in //World::Compile::compile//
3.3% in //Assertions::Traverse::traverse1//
2.5% in //Sentences::VPs::traverse//
2.1% in //Phrases::Manager::RulePrintingRule_routine//
67.8% in compilation to Inter
29.0% in //Phrases::Manager::compile_first_block//
8.1% in //Phrases::Manager::compile_as_needed//
6.7% in //Strings::compile_responses//
5.6% in //World::Compile::compile//
3.0% in //Assertions::Traverse::traverse1//
2.9% in //Sentences::VPs::traverse//
1.9% in //Phrases::Manager::RulePrintingRule_routine//
1.9% in //Phrases::Manager::rulebooks_array//
1.1% in //NewVerbs::ConjugateVerb//
1.0% in //NewVerbs::ConjugateVerb//
0.7% in //Phrases::Manager::parse_rule_parameters//
0.7% in //Phrases::Manager::traverse//
0.5% in //Phrases::Manager::parse_rule_parameters//
0.3% in //Phrases::Manager::compile_rulebooks//
0.3% in //Phrases::Manager::traverse_for_names//
0.3% in //Relations::compile_defined_relations//
0.1% in //Assertions::Traverse::traverse2//
0.1% in //PL::Parsing::Verbs::compile_all//
0.1% in //Relations::compile_defined_relations//
0.1% in //Sentences::RuleSubtrees::register_recently_lexed_phrases//
0.1% in //Task::load_types//
0.1% in //World::complete//
4.3% not specifically accounted for
31.3% in running Inter pipeline
10.3% in step preparation
9.9% in inter step 2/12: link
7.4% in inter step 12/12: generate inform6 -> auto.inf
3.8% not specifically accounted for
29.7% in running Inter pipeline
9.8% in step preparation
9.6% in inter step 2/12: link
7.0% in inter step 12/12: generate inform6 -> auto.inf
0.3% in inter step 9/12: make-identifiers-unique
0.1% in inter step 10/12: reconcile-verbs
0.1% in inter step 11/12: eliminate-redundant-labels
@ -31,6 +31,6 @@
0.1% in inter step 6/12: assimilate
0.1% in inter step 7/12: resolve-external-symbols
0.1% in inter step 8/12: inspect-plugs
2.1% not specifically accounted for
2.1% in supervisor
0.2% not specifically accounted for
1.8% not specifically accounted for
1.9% in supervisor
0.4% not specifically accounted for

File diff suppressed because it is too large Load diff

View file

@ -65,8 +65,21 @@ this one:
The following routine picks up on the result of this declaration. (We cache
this because we need access to it very quickly when parsing text substitutions.)
@d ADAPTIVE_PERSON_LINGUISTICS_CALLBACK NaturalLanguages::adaptive_person
@d ADAPTIVE_NUMBER_LINGUISTICS_CALLBACK NaturalLanguages::adaptive_number
=
int NaturalLanguages::adaptive_person(inform_language *L) {
int C = NaturalLanguages::adaptive_combination(L);
return C % NO_KNOWN_PERSONS;
}
int NaturalLanguages::adaptive_number(inform_language *L) {
int C = NaturalLanguages::adaptive_combination(L);
return C / NO_KNOWN_PERSONS;
}
int NaturalLanguages::adaptive_combination(inform_language *L) {
#ifdef IF_MODULE
if ((L->adaptive_person == -1) && (P_adaptive_text_viewpoint)) {
instance *I = L->nl_instance;
@ -78,8 +91,7 @@ int NaturalLanguages::adaptive_person(inform_language *L) {
}
}
#endif
if (L->adaptive_person == -1) return FIRST_PERSON_PLURAL;
if (L->adaptive_person == -1) return FIRST_PERSON + 3; /* i.e., plural */
return L->adaptive_person;
}

View file

@ -200,7 +200,6 @@ whole thing into a |specification| for the rest of Inform to use.
@
@d ADAPTIVE_PERSON_LINGUISTICS_CALLBACK NaturalLanguages::adaptive_person
@d MORE_PREFORM_OPTIMISER_WORDS_CALLBACK Semantics::mark_preform_requirements
@d PREFORM_ERROR_WORDS_CALLBACK NaturalLanguages::preform_error

View file

@ -97,14 +97,24 @@ void NewVerbs::add_inequalities(void) {
void NewVerbs::add_inequalities_inner(verb_meaning lt, verb_meaning gt, verb_meaning le, verb_meaning ge) {
set_where_created = NULL;
current_main_verb = NULL;
VerbUsages::register_single_usage(PreformUtilities::wording(<inequality-conjugations>, 0),
FALSE, IS_TENSE, ACTIVE_MOOD, Verbs::new_operator_verb(lt), FALSE);
VerbUsages::register_single_usage(PreformUtilities::wording(<inequality-conjugations>, 1),
FALSE, IS_TENSE, ACTIVE_MOOD, Verbs::new_operator_verb(gt), FALSE);
VerbUsages::register_single_usage(PreformUtilities::wording(<inequality-conjugations>, 2),
FALSE, IS_TENSE, ACTIVE_MOOD, Verbs::new_operator_verb(le), FALSE);
VerbUsages::register_single_usage(PreformUtilities::wording(<inequality-conjugations>, 3),
FALSE, IS_TENSE, ACTIVE_MOOD, Verbs::new_operator_verb(ge), FALSE);
for (int i=0; i<=3; i++) {
verb *v = NULL;
switch (i) {
case 0: v = Verbs::new_operator_verb(lt); break;
case 1: v = Verbs::new_operator_verb(gt); break;
case 2: v = Verbs::new_operator_verb(le); break;
case 3: v = Verbs::new_operator_verb(ge); break;
}
lcon_ti l = Verbs::to_lcon(v);
l = Lcon::set_mood(l, ACTIVE_MOOD);
l = Lcon::set_tense(l, IS_TENSE);
l = Lcon::set_sense(l, POSITIVE_SENSE);
l = Lcon::set_person(l, THIRD_PERSON);
l = Lcon::set_number(l, SINGULAR_NUMBER);
VerbUsages::register_single_usage(
PreformUtilities::wording(<inequality-conjugations>, i), FALSE, l);
}
}
verb_meaning NewVerbs::ineq_vm(binary_predicate *bp) {
@ -960,38 +970,41 @@ void NewVerbs::ConjugateVerb(void) {
Routines::end(save);
@<Check for modality@> =
for (int sense = 0; sense < 2; sense++)
for (int sense=0; sense<NO_KNOWN_SENSES; sense++)
for (int tense=0; tense<NO_KNOWN_TENSES; tense++)
for (int part=1; part<=6; part++)
if (vc->tabulations[ACTIVE_MOOD].modal_auxiliary_usage[tense][sense][part-1] != 0)
modal_verb = TRUE;
for (int person=0; person<NO_KNOWN_PERSONS; person++)
for (int number=0; number<NO_KNOWN_NUMBERS; number++)
if (vc->tabulations[ACTIVE_MOOD].modal_auxiliary_usage[tense][sense][person][number] != 0)
modal_verb = TRUE;
@<Compile conjugation in this sense@> =
for (int tense=0; tense<NO_KNOWN_TENSES; tense++) {
int some_exist = FALSE, some_dont_exist = FALSE,
some_differ = FALSE, some_except_3PS_differ = FALSE, some_are_modal = FALSE;
word_assemblage *common = NULL, *common_except_3PS = NULL;
for (int part=1; part<=6; part++) {
word_assemblage *wa = &(vc->tabulations[ACTIVE_MOOD].vc_text[tense][sense][part-1]);
if (WordAssemblages::nonempty(*wa)) {
if (some_exist) {
if (WordAssemblages::eq(wa, common) == FALSE)
some_differ = TRUE;
if (part != 3) {
if (common_except_3PS == NULL) common_except_3PS = wa;
else if (WordAssemblages::eq(wa, common_except_3PS) == FALSE)
some_except_3PS_differ = TRUE;
for (int person=0; person<NO_KNOWN_PERSONS; person++)
for (int number=0; number<NO_KNOWN_NUMBERS; number++) {
word_assemblage *wa = &(vc->tabulations[ACTIVE_MOOD].vc_text[tense][sense][person][number]);
if (WordAssemblages::nonempty(*wa)) {
if (some_exist) {
if (WordAssemblages::eq(wa, common) == FALSE)
some_differ = TRUE;
if ((person != THIRD_PERSON) || (number != SINGULAR_NUMBER)) {
if (common_except_3PS == NULL) common_except_3PS = wa;
else if (WordAssemblages::eq(wa, common_except_3PS) == FALSE)
some_except_3PS_differ = TRUE;
}
} else {
some_exist = TRUE;
common = wa;
if ((person != THIRD_PERSON) || (number != SINGULAR_NUMBER))
common_except_3PS = wa;
}
} else {
some_exist = TRUE;
common = wa;
if (part != 3) common_except_3PS = wa;
if (vc->tabulations[ACTIVE_MOOD].modal_auxiliary_usage[tense][sense][person][number] != 0)
some_are_modal = TRUE;
}
if (vc->tabulations[ACTIVE_MOOD].modal_auxiliary_usage[tense][sense][part-1] != 0)
some_are_modal = TRUE;
else some_dont_exist = TRUE;
}
else some_dont_exist = TRUE;
}
if (some_exist) {
Produce::inv_primitive(Emit::tree(), CASE_BIP);
Produce::down(Emit::tree());
@ -1017,20 +1030,22 @@ void NewVerbs::ConjugateVerb(void) {
Produce::val_symbol(Emit::tree(), K_value, vp_s);
Produce::code(Emit::tree());
Produce::down(Emit::tree());
for (int part=1; part<=6; part++) {
word_assemblage *wa = &(vc->tabulations[ACTIVE_MOOD].vc_text[tense][sense][part-1]);
if (WordAssemblages::nonempty(*wa)) {
Produce::inv_primitive(Emit::tree(), CASE_BIP);
Produce::down(Emit::tree());
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) part);
Produce::code(Emit::tree());
for (int person=0; person<NO_KNOWN_PERSONS; person++)
for (int number=0; number<NO_KNOWN_NUMBERS; number++) {
word_assemblage *wa = &(vc->tabulations[ACTIVE_MOOD].vc_text[tense][sense][person][number]);
if (WordAssemblages::nonempty(*wa)) {
Produce::inv_primitive(Emit::tree(), CASE_BIP);
Produce::down(Emit::tree());
int mau = vc->tabulations[ACTIVE_MOOD].modal_auxiliary_usage[tense][sense][part-1];
NewVerbs::conj_from_wa(wa, vc, modal_to_s, mau);
inter_ti part = ((inter_ti) person) + 3*((inter_ti) number) + 1;
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) part);
Produce::code(Emit::tree());
Produce::down(Emit::tree());
int mau = vc->tabulations[ACTIVE_MOOD].modal_auxiliary_usage[tense][sense][person][number];
NewVerbs::conj_from_wa(wa, vc, modal_to_s, mau);
Produce::up(Emit::tree());
Produce::up(Emit::tree());
Produce::up(Emit::tree());
}
}
}
Produce::up(Emit::tree());
Produce::up(Emit::tree());
@ -1044,18 +1059,18 @@ void NewVerbs::ConjugateVerb(void) {
Produce::up(Emit::tree());
Produce::code(Emit::tree());
Produce::down(Emit::tree());
word_assemblage *wa = &(vc->tabulations[ACTIVE_MOOD].vc_text[tense][sense][2]);
word_assemblage *wa = &(vc->tabulations[ACTIVE_MOOD].vc_text[tense][sense][THIRD_PERSON][SINGULAR_NUMBER]);
NewVerbs::conj_from_wa(wa, vc, modal_to_s, 0);
Produce::up(Emit::tree());
Produce::code(Emit::tree());
Produce::down(Emit::tree());
wa = &(vc->tabulations[ACTIVE_MOOD].vc_text[tense][sense][0]);
wa = &(vc->tabulations[ACTIVE_MOOD].vc_text[tense][sense][FIRST_PERSON][SINGULAR_NUMBER]);
NewVerbs::conj_from_wa(wa, vc, modal_to_s, 0);
Produce::up(Emit::tree());
Produce::up(Emit::tree());
@<Compile for the case where all six parts are the same@> =
word_assemblage *wa = &(vc->tabulations[ACTIVE_MOOD].vc_text[tense][sense][0]);
word_assemblage *wa = &(vc->tabulations[ACTIVE_MOOD].vc_text[tense][sense][FIRST_PERSON][SINGULAR_NUMBER]);
NewVerbs::conj_from_wa(wa, vc, modal_to_s, 0);
@ =
@ -1177,10 +1192,7 @@ usages to the debugging log.
=
void NewVerbs::log(verb_usage *vu) {
if (vu == NULL) { LOG("(null verb usage)"); return; }
LOG("VU: $f ", &(vu->vu_text));
if (vu->negated_form_of_verb) LOG("(negated) ");
Lcon::log_tense_number(DL, vu->tensed);
VerbUsages::write(DL, vu);
}
void NewVerbs::log_all(void) {
@ -1200,7 +1212,7 @@ void NewVerbs::log_all(void) {
The following produces the table of verbs in the Phrasebook Index page.
=
void NewVerbs::tabulate(OUTPUT_STREAM, lexicon_entry *lex, int tense, char *tensename) {
void NewVerbs::tabulate(OUTPUT_STREAM, index_lexicon_entry *lex, int tense, char *tensename) {
verb_usage *vu; int f = TRUE;
LOOP_OVER(vu, verb_usage)
if ((vu->vu_lex_entry == lex) && (VerbUsages::is_used_negatively(vu) == FALSE)
@ -1220,13 +1232,13 @@ void NewVerbs::tabulate(OUTPUT_STREAM, lexicon_entry *lex, int tense, char *tens
if (f == FALSE) HTML_CLOSE("p");
}
void NewVerbs::tabulate_meaning(OUTPUT_STREAM, lexicon_entry *lex) {
void NewVerbs::tabulate_meaning(OUTPUT_STREAM, index_lexicon_entry *lex) {
verb_usage *vu;
LOOP_OVER(vu, verb_usage)
if (vu->vu_lex_entry == lex) {
if (vu->where_vu_created)
Index::link(OUT, Wordings::first_wn(Node::get_text(vu->where_vu_created)));
binary_predicate *bp = VerbMeanings::get_regular_meaning_of_form(Verbs::base_form(vu->verb_used));
binary_predicate *bp = VerbMeanings::get_regular_meaning_of_form(Verbs::base_form(VerbUsages::get_verb(vu)));
if (bp) Relations::index_for_verbs(OUT, bp);
return;
}

View file

@ -13,13 +13,13 @@ which use this module:
@e documentation_ref_CLASS
@e index_page_CLASS
@e index_element_CLASS
@e lexicon_entry_CLASS
@e index_lexicon_entry_CLASS
=
DECLARE_CLASS(documentation_ref)
DECLARE_CLASS(index_element)
DECLARE_CLASS(index_page)
DECLARE_CLASS(lexicon_entry)
DECLARE_CLASS(index_lexicon_entry)
@ Like all modules, this one must define a |start| and |end| function:

View file

@ -28,7 +28,7 @@ umbrella, the "lexicon entry" structure:
any collation of up to 5 vocabulary entries.
=
typedef struct lexicon_entry {
typedef struct index_lexicon_entry {
struct wording wording_of_entry; /* either the text of the entry, or empty, in which case... */
struct word_assemblage text_of_entry;
@ -39,21 +39,21 @@ typedef struct lexicon_entry {
char *gloss_note; /* gloss on the definition, or |NULL| if none is provided */
struct text_stream *reduced_to_lower_case; /* text converted to lower case for sorting */
struct lexicon_entry *sorted_next; /* next in lexicographic order */
struct index_lexicon_entry *sorted_next; /* next in lexicographic order */
CLASS_DEFINITION
} lexicon_entry;
} index_lexicon_entry;
@
= (early code)
lexicon_entry *sorted_lexicon = NULL; /* head of list in lexicographic order */
lexicon_entry *current_main_verb = NULL; /* when parsing verb declarations */
index_lexicon_entry *sorted_lexicon = NULL; /* head of list in lexicographic order */
index_lexicon_entry *current_main_verb = NULL; /* when parsing verb declarations */
@ Lexicon entries are created by the following routine:
=
lexicon_entry *IndexLexicon::lexicon_new_entry(wording W) {
lexicon_entry *lex = CREATE(lexicon_entry);
index_lexicon_entry *IndexLexicon::lexicon_new_entry(wording W) {
index_lexicon_entry *lex = CREATE(index_lexicon_entry);
lex->wording_of_entry = W;
lex->text_of_entry = WordAssemblages::lit_0();
lex->part_of_speech = MISCELLANEOUS_LEXE;
@ -68,17 +68,17 @@ The |current_main_verb| setting is used to ensure that inflected forms of the
same verb are grouped together in the verbs table.
=
lexicon_entry *IndexLexicon::new_entry_with_details(wording W, int pos,
index_lexicon_entry *IndexLexicon::new_entry_with_details(wording W, int pos,
word_assemblage wa, char *category, char *gloss) {
lexicon_entry *lex = IndexLexicon::lexicon_new_entry(W);
index_lexicon_entry *lex = IndexLexicon::lexicon_new_entry(W);
lex->part_of_speech = pos;
lex->text_of_entry = wa;
lex->category = category; lex->gloss_note = gloss;
return lex;
}
lexicon_entry *IndexLexicon::new_main_verb(word_assemblage infinitive, int part) {
lexicon_entry *lex = IndexLexicon::lexicon_new_entry(EMPTY_WORDING);
index_lexicon_entry *IndexLexicon::new_main_verb(word_assemblage infinitive, int part) {
index_lexicon_entry *lex = IndexLexicon::lexicon_new_entry(EMPTY_WORDING);
lex->text_of_entry = infinitive;
lex->part_of_speech = part;
lex->category = "verb";
@ -92,7 +92,7 @@ collection of vocabulary words, and it's therefore convenient to have a utility
routine which extracts the name in plain text from either source.
=
void IndexLexicon::lexicon_copy_to_stream(lexicon_entry *lex, text_stream *text) {
void IndexLexicon::lexicon_copy_to_stream(index_lexicon_entry *lex, text_stream *text) {
if (Wordings::nonempty(lex->wording_of_entry))
WRITE_TO(text, "%+W", lex->wording_of_entry);
else
@ -138,7 +138,7 @@ void IndexLexicon::index_common_nouns(OUTPUT_STREAM) {
LOOP_OVER_OBJECT_INSTANCES(I) {
wording W = Instances::get_name(I, FALSE);
if (Wordings::nonempty(W)) {
lexicon_entry *lex = IndexLexicon::lexicon_new_entry(W);
index_lexicon_entry *lex = IndexLexicon::lexicon_new_entry(W);
lex->part_of_speech = PROPER_NOUN_LEXE;
lex->category = "noun";
lex->entry_refers_to = STORE_POINTER_instance(I);
@ -155,7 +155,7 @@ source text.
if (Kinds::Compare::lt(K, K_object)) {
wording W = Kinds::Behaviour::get_name(K, FALSE);
if (Wordings::nonempty(W)) {
lexicon_entry *lex = IndexLexicon::lexicon_new_entry(W);
index_lexicon_entry *lex = IndexLexicon::lexicon_new_entry(W);
lex->part_of_speech = NOUN_LEXE;
lex->category = "noun";
lex->entry_refers_to = STORE_POINTER_kind(K);
@ -165,7 +165,7 @@ source text.
@ These are adjectives set up by "Definition:".
@<Stock the lexicon with adjectives from names of adjectival phrases@> =
lexicon_entry *lex;
index_lexicon_entry *lex;
adjective *adj;
LOOP_OVER(adj, adjective) {
wording W = Adjectives::get_nominative_singular(adj);
@ -182,7 +182,7 @@ then its values should be indexed as nouns -- "red", "blue" and so
on. (Sometimes these will also be listed separately with an adjectival sense.)
@<Stock the lexicon with nouns from named values@> =
lexicon_entry *lex;
index_lexicon_entry *lex;
instance *qn;
LOOP_OVER_ENUMERATION_INSTANCES(qn) {
property *prn =
@ -219,8 +219,8 @@ Before we can sort the lexicon, we need to turn its disparate forms of name
into a single, canonical, lower-case representation.
@<Create lower-case forms of all lexicon entries@> =
lexicon_entry *lex;
LOOP_OVER(lex, lexicon_entry) {
index_lexicon_entry *lex;
LOOP_OVER(lex, index_lexicon_entry) {
IndexLexicon::lexicon_copy_to_stream(lex, lex->reduced_to_lower_case);
LOOP_THROUGH_TEXT(pos, lex->reduced_to_lower_case)
Str::put(pos, Characters::tolower(Str::get(pos)));
@ -232,9 +232,9 @@ more than 1000 or so entries, so the speed penalty for insertion rather
than (say) quicksort is not great.
@<Sort the lexicon into alphabetical order@> =
lexicon_entry *lex;
LOOP_OVER(lex, lexicon_entry) {
lexicon_entry *lex2, *last_lex;
index_lexicon_entry *lex;
LOOP_OVER(lex, index_lexicon_entry) {
index_lexicon_entry *lex2, *last_lex;
if (sorted_lexicon == NULL) {
sorted_lexicon = lex; lex->sorted_next = NULL; continue;
}
@ -275,7 +275,7 @@ explanation of what it is: for instance,
In a few cases, there is a further textual gloss to add.
@<Main body of the lexicon@> =
lexicon_entry *lex;
index_lexicon_entry *lex;
wchar_t current_initial_letter = '?';
int verb_count = 0, entry_count = 0, c;
for (lex = sorted_lexicon; lex; lex = lex->sorted_next)
@ -439,7 +439,7 @@ void IndexLexicon::index_verbs(OUTPUT_STREAM) {
"and can be used in adaptive text, but they have no meaning to Inform, so "
"they can't be used in sentences about what's in the story.");
HTML_CLOSE("p");
lexicon_entry *lex = sorted_lexicon;
index_lexicon_entry *lex = sorted_lexicon;
int verb_count = 0;
for (lex = sorted_lexicon; lex; lex = lex->sorted_next)
if ((lex->part_of_speech == VERB_LEXE) ||
@ -475,8 +475,8 @@ be able to print out a table of just those verbs created in that extension.
=
void IndexLexicon::list_verbs_in_file(OUTPUT_STREAM, source_file *sf, inform_extension *E) {
int verb_count = 0;
lexicon_entry *lex;
LOOP_OVER(lex, lexicon_entry)
index_lexicon_entry *lex;
LOOP_OVER(lex, index_lexicon_entry)
if (((lex->part_of_speech == VERB_LEXE) || (lex->part_of_speech == ABLE_VERB_LEXE))
&& (lex->verb_defined_at)
&& (Lexer::file_of_origin(Wordings::first_wn(Node::get_text(lex->verb_defined_at))) == sf)) {

View file

@ -14,16 +14,10 @@ First, we support three genders:
in the English Language extension, which we assume will be followed by other
languages.
@d NO_KNOWN_PERSONS 6
@d NO_KNOWN_PERSONS 3
@d FIRST_PERSON 0
@d SECOND_PERSON 1
@d THIRD_PERSON 2
@d FIRST_PERSON_SINGULAR 0
@d SECOND_PERSON_SINGULAR 1
@d THIRD_PERSON_SINGULAR 2
@d FIRST_PERSON_PLURAL 3
@d SECOND_PERSON_PLURAL 4
@d THIRD_PERSON_PLURAL 5
@ And two numbers:
@ -107,6 +101,7 @@ values, and at present Preform return values are |int|.
@d SENSE_LCBASE 0x00004000
@d SENSE_LCMASK 0x00004000
@d ID_LCBASE 0x00008000
@d ID_LCUNMASK 0x00007FFF
=
lcon_ti Lcon::base(void) { return (lcon_ti) 0; }
@ -121,6 +116,7 @@ int Lcon::get_case(lcon_ti l) { return (int) (l & CASE_LCMASK) / CASE_LCBASE;
int Lcon::get_tense(lcon_ti l) { return (int) (l & TENSE_LCMASK) / TENSE_LCBASE; }
int Lcon::get_sense(lcon_ti l) { return (int) (l & SENSE_LCMASK) / SENSE_LCBASE; }
lcon_ti Lcon::set_id(lcon_ti l, int id) { return (l & ID_LCUNMASK) + id*ID_LCBASE; }
lcon_ti Lcon::set_gender(lcon_ti l, int x) { return (l & (~GENDER_LCMASK)) + x*GENDER_LCBASE; }
lcon_ti Lcon::set_person(lcon_ti l, int x) { return (l & (~PERSON_LCMASK)) + x*PERSON_LCBASE; }
lcon_ti Lcon::set_number(lcon_ti l, int x) { return (l & (~NUMBER_LCMASK)) + x*NUMBER_LCBASE; }
@ -132,7 +128,41 @@ lcon_ti Lcon::set_sense(lcon_ti l, int x) { return (l & (~SENSE_LCMASK)) + x*SE
@
=
void Lcon::log_tense_number(OUTPUT_STREAM, int t) {
void Lcon::write_person(OUTPUT_STREAM, int p) {
switch (p) {
case FIRST_PERSON: WRITE("1p"); break;
case SECOND_PERSON: WRITE("2p"); break;
case THIRD_PERSON: WRITE("3p"); break;
}
}
void Lcon::write_number(OUTPUT_STREAM, int n) {
switch (n) {
case SINGULAR_NUMBER: WRITE(" s"); break;
case PLURAL_NUMBER: WRITE(" p"); break;
}
}
void Lcon::write_gender(OUTPUT_STREAM, int g) {
switch (g) {
case NEUTER_GENDER: WRITE(" (n)"); break;
case MASCULINE_GENDER: WRITE(" (m)"); break;
case FEMININE_GENDER: WRITE(" (f)"); break;
}
}
void Lcon::write_sense(OUTPUT_STREAM, int s) {
if (s == NEGATIVE_SENSE) WRITE(" -ve");
if (s == POSITIVE_SENSE) WRITE(" +ve");
}
void Lcon::write_mood(OUTPUT_STREAM, int m) {
if (m == ACTIVE_MOOD) WRITE(" act");
if (m == PASSIVE_MOOD) WRITE(" pass");
}
void Lcon::write_tense(OUTPUT_STREAM, int t) {
WRITE(" ");
switch (t) {
case IS_TENSE: WRITE("IS_TENSE"); break;
case WAS_TENSE: WRITE("WAS_TENSE"); break;

View file

@ -30,8 +30,8 @@ typedef struct verb_conjugation {
typedef struct verb_tabulation {
struct word_assemblage to_be_auxiliary; /* use this if non-empty */
struct word_assemblage vc_text[NO_KNOWN_TENSES][2][6];
int modal_auxiliary_usage[NO_KNOWN_TENSES][2][6];
struct word_assemblage vc_text[NO_KNOWN_TENSES][NO_KNOWN_SENSES][NO_KNOWN_PERSONS][NO_KNOWN_NUMBERS];
int modal_auxiliary_usage[NO_KNOWN_TENSES][NO_KNOWN_SENSES][NO_KNOWN_PERSONS][NO_KNOWN_NUMBERS];
} verb_tabulation;
@h Finding.
@ -70,15 +70,16 @@ int Conjugation::eq(verb_conjugation *nvc, verb_conjugation *vc) {
verb_tabulation *vt = &(vc->tabulations[i]);
if (WordAssemblages::eq(
&(nvt->to_be_auxiliary), &(vt->to_be_auxiliary)) == FALSE) return FALSE;
for (int p=0; p<6; p++)
for (int s=0; s<2; s++)
for (int t=0; t<NO_KNOWN_TENSES; t++) {
if (WordAssemblages::eq(
&(nvt->vc_text[t][s][p]), &(vt->vc_text[t][s][p])) == FALSE)
for (int t=0; t<NO_KNOWN_TENSES; t++)
for (int s=0; s<NO_KNOWN_SENSES; s++)
for (int p=0; p<NO_KNOWN_PERSONS; p++)
for (int n=0; n<NO_KNOWN_NUMBERS; n++) {
if (WordAssemblages::eq(
&(nvt->vc_text[t][s][p][n]), &(vt->vc_text[t][s][p][n])) == FALSE)
return FALSE;
if (nvt->modal_auxiliary_usage[t][s][p] !=
vt->modal_auxiliary_usage[t][s][p]) return FALSE;
}
if (nvt->modal_auxiliary_usage[t][s][p][n] !=
vt->modal_auxiliary_usage[t][s][p][n]) return FALSE;
}
}
return TRUE;
}
@ -94,23 +95,24 @@ void Conjugation::write(OUTPUT_STREAM, verb_conjugation *vc) {
int mood_count = 2;
if (WordAssemblages::nonempty(vc->tabulations[PASSIVE_MOOD].to_be_auxiliary))
mood_count = 1;
int mood, sense, tense, person;
for (mood=0; mood<mood_count; mood++) {
for (sense=0; sense<2; sense++) {
for (int mood=0; mood<mood_count; mood++) {
for (int sense=0; sense<NO_KNOWN_SENSES; sense++) {
if (mood == 0) WRITE("Active "); else WRITE("Passive ");
if (sense == 0) WRITE("positive^"); else WRITE("negative^");
for (tense=0; tense<7; tense++) {
for (int tense=0; tense<NO_KNOWN_TENSES; tense++) {
WRITE("Tense %d: ", tense);
for (person=0; person<6; person++) {
word_assemblage *wa;
if (mood == 0)
wa = &(vc->tabulations[ACTIVE_MOOD].vc_text[tense][sense][person]);
else
wa = &(vc->tabulations[PASSIVE_MOOD].vc_text[tense][sense][person]);
if (person > 0) WRITE(" / ");
if (WordAssemblages::nonempty(*wa)) WRITE("%A", wa);
else WRITE("--");
}
int person = 0;
for (int n=0; n<NO_KNOWN_NUMBERS; n++)
for (int p=0; p<NO_KNOWN_PERSONS; p++) {
word_assemblage *wa;
if (mood == 0)
wa = &(vc->tabulations[ACTIVE_MOOD].vc_text[tense][sense][p][n]);
else
wa = &(vc->tabulations[PASSIVE_MOOD].vc_text[tense][sense][p][n]);
if (person++ > 0) WRITE(" / ");
if (WordAssemblages::nonempty(*wa)) WRITE("%A", wa);
else WRITE("--");
}
WRITE("^");
}
}
@ -201,15 +203,15 @@ Note that verb form 0 can't be overridden: that was the base text.
@<Start by blanking out all the passive and active slots@> =
vc->tabulations[ACTIVE_MOOD].to_be_auxiliary = WordAssemblages::lit_0();
vc->tabulations[PASSIVE_MOOD].to_be_auxiliary = WordAssemblages::lit_0();
int i, tense, sense;
for (tense=0; tense<NO_KNOWN_TENSES; tense++)
for (sense=0; sense<2; sense++)
for (i=0; i<6; i++) {
vc->tabulations[ACTIVE_MOOD].vc_text[tense][sense][i] =
WordAssemblages::lit_0();
vc->tabulations[PASSIVE_MOOD].vc_text[tense][sense][i] =
WordAssemblages::lit_0();
}
for (int t=0; t<NO_KNOWN_TENSES; t++)
for (int s=0; s<NO_KNOWN_SENSES; s++)
for (int n=0; n<NO_KNOWN_NUMBERS; n++)
for (int p=0; p<NO_KNOWN_PERSONS; p++) {
vc->tabulations[ACTIVE_MOOD].vc_text[t][s][p][n] =
WordAssemblages::lit_0();
vc->tabulations[PASSIVE_MOOD].vc_text[t][s][p][n] =
WordAssemblages::lit_0();
}
@ A tabulation is a sort of program laying out what to put in which slots,
active or passive. Each production is a step in this program, and it consists
@ -224,8 +226,7 @@ rest. (The selector is always just a single token.)
production_list *pl;
for (pl = tabulation->first_pl; pl; pl = pl->next_pl) {
if (nl == pl->definition_language) {
production *pr;
for (pr = pl->first_pr; pr; pr = pr->next_pr) {
for (production *pr = pl->first_pr; pr; pr = pr->next_pr) {
ptoken *selector = pr->first_pt;
ptoken *line = (selector)?(selector->next_pt):NULL;
if ((selector) && (selector->ptoken_category == FIXED_WORD_PTC) &&
@ -243,26 +244,28 @@ rest. (The selector is always just a single token.)
if (set_tba)
vc->tabulations[PASSIVE_MOOD].to_be_auxiliary =
Conjugation::merge(line, 0, 0, 0, MAX_FORM_TYPES+1, verb_forms, nl, NULL);
Conjugation::merge(line, POSITIVE_SENSE, IS_TENSE, FIRST_PERSON,
SINGULAR_NUMBER, MAX_FORM_TYPES+1, verb_forms, nl, NULL);
for (int tense=0; tense<NO_KNOWN_TENSES; tense++)
for (int sense=0; sense<2; sense++)
for (int person=0; person<6; person++) {
if ((sense_set >= 0) && (sense != sense_set)) continue;
if ((tense_set >= 0) && (tense != tense_set)) continue;
if (active_set) @<Apply to the active mood@>
else @<Apply to the passive mood@>;
}
for (int sense=0; sense<NO_KNOWN_SENSES; sense++)
for (int n=0; n<NO_KNOWN_NUMBERS; n++)
for (int p=0; p<NO_KNOWN_PERSONS; p++) {
if ((sense_set >= 0) && (sense != sense_set)) continue;
if ((tense_set >= 0) && (tense != tense_set)) continue;
if (active_set) @<Apply to the active mood@>
else @<Apply to the passive mood@>;
}
@<Apply to the active mood@> =
vc->tabulations[ACTIVE_MOOD].vc_text[tense][sense][person] =
Conjugation::merge(line, sense, tense, person, MAX_FORM_TYPES+1, verb_forms, nl,
&(vc->tabulations[ACTIVE_MOOD].modal_auxiliary_usage[tense][sense][person]));
vc->tabulations[ACTIVE_MOOD].vc_text[tense][sense][p][n] =
Conjugation::merge(line, sense, tense, p, n, MAX_FORM_TYPES+1, verb_forms, nl,
&(vc->tabulations[ACTIVE_MOOD].modal_auxiliary_usage[tense][sense][p][n]));
@<Apply to the passive mood@> =
vc->tabulations[PASSIVE_MOOD].vc_text[tense][sense][person] =
Conjugation::merge(line, sense, tense, person, MAX_FORM_TYPES+1, verb_forms, nl,
&(vc->tabulations[PASSIVE_MOOD].modal_auxiliary_usage[tense][sense][person]));
vc->tabulations[PASSIVE_MOOD].vc_text[tense][sense][p][n] =
Conjugation::merge(line, sense, tense, p, n, MAX_FORM_TYPES+1, verb_forms, nl,
&(vc->tabulations[PASSIVE_MOOD].modal_auxiliary_usage[tense][sense][p][n]));
@ The selector tells us which tense(s), sense(s) and mood(s) to apply the
line to; |a3|, for example, means active mood, tense 3, in both positive
@ -300,7 +303,7 @@ inter_name *Conjugation::conj_iname(verb_conjugation *vc) {
package_request *R =
Hierarchy::package(Modules::find(vc->where_vc_created), MVERBS_HAP);
TEMPORARY_TEXT(ANT)
WRITE_TO(ANT, "%A (modal)", &(vc->tabulations[ACTIVE_MOOD].vc_text[0][0][2]));
WRITE_TO(ANT, "%A (modal)", &(vc->tabulations[ACTIVE_MOOD].vc_text[IS_TENSE][POSITIVE_SENSE][THIRD_PERSON]));
Hierarchy::markup(R, MVERB_NAME_HMD, ANT);
DISCARD_TEXT(ANT)
vc->vc_iname = Hierarchy::make_iname_in(MODAL_CONJUGATION_FN_HL, R);
@ -508,7 +511,7 @@ There are other complications, too. See "English Inflections" for more.
=
word_assemblage Conjugation::merge(ptoken *row,
int sense, int tense, int person, int num_ingredients, word_assemblage *ingredients,
int sense, int tense, int person, int number, int num_ingredients, word_assemblage *ingredients,
NATURAL_LANGUAGE_WORDS_TYPE *nl, int *modal_following) {
if (modal_following) { *modal_following = 0; }
word_assemblage wa = WordAssemblages::lit_0();
@ -550,9 +553,9 @@ make use of the same fancy features we're allowing here.
int N = 0;
production *pr;
for (pr = pl->first_pr; pr; pr = pr->next_pr) {
if (N == person)
if (N == number*3 + person)
wa = WordAssemblages::join(wa,
Conjugation::merge(pr->first_pt, sense, tense, person,
Conjugation::merge(pr->first_pt, sense, tense, person, number,
num_ingredients, ingredients, nl, NULL));
N++;
}
@ -616,7 +619,7 @@ make use of the numbered verb forms if we want it to.
case 2: wa = WordAssemblages::join(wa, aux->present_participle); break;
case 3: wa = WordAssemblages::join(wa, aux->past_participle); break;
case -1: wa = WordAssemblages::join(wa,
aux->tabulations[ACTIVE_MOOD].vc_text[T][S][person]); break;
aux->tabulations[ACTIVE_MOOD].vc_text[T][S][person][number]); break;
default: internal_error("only parts 1, 2, 3 can be extracted");
}
continue;

View file

@ -64,15 +64,8 @@ article *Articles::from_lcon(lcon_ti lcon) {
void Articles::write_lcon(OUTPUT_STREAM, lcon_ti lcon) {
article *P = Articles::from_lcon(lcon);
WRITE(" %S ", P->name);
switch (Lcon::get_number(lcon)) {
case SINGULAR_NUMBER: WRITE("s"); break;
case PLURAL_NUMBER: WRITE("p"); break;
}
switch (Lcon::get_gender(lcon)) {
case NEUTER_GENDER: WRITE("(n)"); break;
case MASCULINE_GENDER: WRITE("(m)"); break;
case FEMININE_GENDER: WRITE("(f)"); break;
}
Lcon::write_number(OUT, Lcon::get_number(lcon));
Lcon::write_gender(OUT, Lcon::get_gender(lcon));
}
@h English articles.

View file

@ -68,20 +68,9 @@ pronoun *Pronouns::from_lcon(lcon_ti lcon) {
void Pronouns::write_lcon(OUTPUT_STREAM, lcon_ti lcon) {
pronoun *P = Pronouns::from_lcon(lcon);
WRITE(" %S ", P->name);
switch (Lcon::get_person(lcon)) {
case FIRST_PERSON: WRITE("1p"); break;
case SECOND_PERSON: WRITE("2p"); break;
case THIRD_PERSON: WRITE("3p"); break;
}
switch (Lcon::get_number(lcon)) {
case SINGULAR_NUMBER: WRITE("s"); break;
case PLURAL_NUMBER: WRITE("p"); break;
}
switch (Lcon::get_gender(lcon)) {
case NEUTER_GENDER: WRITE("(n)"); break;
case MASCULINE_GENDER: WRITE("(m)"); break;
case FEMININE_GENDER: WRITE("(f)"); break;
}
Lcon::write_person(OUT, Lcon::get_person(lcon));
Lcon::write_number(OUT, Lcon::get_number(lcon));
Lcon::write_gender(OUT, Lcon::get_gender(lcon));
}
@h English pronouns.

View file

@ -70,7 +70,7 @@ void Occurrence::log(OUTPUT_STREAM, void *vtp) {
default: WRITE(": <invalid-units>"); break;
}
if (tp->tense != IS_TENSE) {
WRITE(": "); Lcon::log_tense_number(OUT, tp->tense);
WRITE(":"); Lcon::write_tense(OUT, tp->tense);
}
WRITE(">");
}

View file

@ -23,7 +23,7 @@ will vary depending on the verb it's coupled with.
typedef struct preposition {
struct word_assemblage prep_text;
#ifdef CORE_MODULE
struct lexicon_entry *prep_lex_entry; /* for use when indexing */
struct index_lexicon_entry *prep_lex_entry; /* for use when indexing */
#endif
struct parse_node *where_prep_created; /* for use if problem messages needed */
int allow_unexpected_upper_case; /* for preps like "in Cahoots With" */

View file

@ -2,21 +2,10 @@
To parse the many forms a verb can take.
@
@default VERB_MEANING_LINGUISTICS_TYPE struct verb_conjugation
@ The "permitted verb" is just a piece of temporary context used in parsing:
it's convenient for the verb currently being considered to be stored in
a global variable.
=
verb *permitted_verb = NULL;
@h Verb usages.
We already have the ability to conjugate verbs -- to turn "to have" into "I have",
"you have", "he has", "they have had", "we will have" and so on -- from the
Inflections module. However, we won't necessarily want to recognise all of
//inflections// module. However, we won't necessarily want to recognise all of
those forms in sentences in the source text. For example, Inform only looks
at present tense forms of verbs in the third person, or at imperative forms.
@ -25,21 +14,18 @@ be turned into one of the following structures:
=
typedef struct verb_usage {
lcon_ti grammatical_usage; /* includes verb, mood, tense, sense */
struct word_assemblage vu_text; /* text to recognise */
int vu_allow_unexpected_upper_case; /* for verbs like "to Hoover" or "to Google" */
struct verb *verb_used;
int negated_form_of_verb; /* is this a negated form? */
int mood; /* active/passive: one of the two |*_MOOD| values */
int tensed; /* one of the |*_TENSE| values */
struct verb_usage *next_in_search_list; /* within a linked list of all usages in length order */
struct verb_usage *next_within_tier; /* within the linked list for this tier (see below) */
struct parse_node *where_vu_created; /* for use if problem messages needed */
struct linguistic_stock_item *in_stock;
#ifdef CORE_MODULE
struct lexicon_entry *vu_lex_entry; /* for use when indexing */
struct index_lexicon_entry *vu_lex_entry; /* for use when indexing */
#endif
struct parse_node *where_vu_created; /* for use if problem messages needed */
struct verb_usage *next_in_search_list; /* within a linked list of all usages in length order */
struct verb_usage *next_within_tier; /* within the linked list for this tier (see below) */
CLASS_DEFINITION
} verb_usage;
@ -87,20 +73,18 @@ Here we create a single verb usage; note that the empty text cannot be used.
=
parse_node *set_where_created = NULL;
verb_usage *VerbUsages::register_single_usage(word_assemblage wa, int negated, int tense,
int mood, verb *vi, int unexpected_upper_casing_used) {
verb_usage *VerbUsages::register_single_usage(word_assemblage wa,
int unexpected_upper_casing_used, lcon_ti semantics) {
if (WordAssemblages::nonempty(wa) == FALSE) return NULL;
LOGIF(VERB_USAGES, "new usage: '%A'\n", &wa);
VerbUsages::mark_as_verb(WordAssemblages::first_word(&wa));
verb_usage *vu = CREATE(verb_usage);
vu->vu_text = wa;
vu->negated_form_of_verb = negated; vu->tensed = tense;
#ifdef CORE_MODULE
vu->vu_lex_entry = current_main_verb;
#endif
vu->where_vu_created = set_where_created;
vu->verb_used = vi;
vu->mood = mood;
vu->grammatical_usage = semantics;
vu->vu_allow_unexpected_upper_case = unexpected_upper_casing_used;
vu->next_within_tier = NULL;
vu->next_in_search_list = NULL;
@ -128,6 +112,20 @@ first in the case of equal length:
}
}
@
=
void VerbUsages::write(OUTPUT_STREAM, verb_usage *vu) {
if (vu == NULL) { WRITE("(null verb usage)"); return; }
WRITE("vu: %A", &(vu->vu_text));
lcon_ti l = vu->grammatical_usage;
Lcon::write_sense(OUT, Lcon::get_sense(l));
Lcon::write_mood(OUT, Lcon::get_mood(l));
Lcon::write_tense(OUT, Lcon::get_tense(l));
Lcon::write_person(OUT, Lcon::get_person(l));
Lcon::write_number(OUT, Lcon::get_number(l));
}
@h Registration of regular verbs.
It would be tiresome to have to call the above routine for every possible
conjugated form of a verb individually, so the following takes care of
@ -226,27 +224,34 @@ the persons from 1PS to 3PP.
out whether it's needed.
@<Register usages in this combination@> =
for (int person = 0; person < NO_KNOWN_PERSONS; person++) {
int p = priority;
#ifdef ALLOW_VERB_IN_ASSERTIONS_LINGUISTICS_CALLBACK
if (ALLOW_VERB_IN_ASSERTIONS_LINGUISTICS_CALLBACK(vc, tense, sense, person) == FALSE) p = 0;
#else
if (VerbUsages::allow_in_assertions(vc, tense, sense, person) == FALSE) p = 0;
#endif
#ifdef ALLOW_VERB_LINGUISTICS_CALLBACK
if (ALLOW_VERB_LINGUISTICS_CALLBACK(vc, tense, sense, person) == FALSE) p = -1;
#else
if (VerbUsages::allow_generally(vc, tense, sense, person) == FALSE) p = -1;
#endif
if (p >= 0) @<Actually register this usage@>;
}
for (int number = 0; number < NO_KNOWN_NUMBERS; number++)
for (int person = 0; person < NO_KNOWN_PERSONS; person++) {
int p = priority;
#ifdef ALLOW_VERB_IN_ASSERTIONS_LINGUISTICS_CALLBACK
if (ALLOW_VERB_IN_ASSERTIONS_LINGUISTICS_CALLBACK(vc, tense, sense, person) == FALSE) p = 0;
#else
if (VerbUsages::allow_in_assertions(vc, tense, sense, person) == FALSE) p = 0;
#endif
#ifdef ALLOW_VERB_LINGUISTICS_CALLBACK
if (ALLOW_VERB_LINGUISTICS_CALLBACK(vc, tense, sense, person) == FALSE) p = -1;
#else
if (VerbUsages::allow_generally(vc, tense, sense, person) == FALSE) p = -1;
#endif
if (p >= 0) @<Actually register this usage@>;
}
@<Actually register this usage@> =
verb_usage *vu = VerbUsages::register_single_usage(vt->vc_text[tense][sense][person],
(sense==1)?TRUE:FALSE, tense, mood, vi, unexpected_upper_casing_used);
lcon_ti l = Verbs::to_lcon(vi);
l = Lcon::set_mood(l, mood);
l = Lcon::set_tense(l, tense);
l = Lcon::set_sense(l, sense);
l = Lcon::set_person(l, person);
l = Lcon::set_number(l, number);
verb_usage *vu = VerbUsages::register_single_usage(vt->vc_text[tense][sense][person][number],
unexpected_upper_casing_used, l);
if (vu) VerbUsages::set_search_priority(vu, p);
if (vi == copular_verb) {
if ((tense == IS_TENSE) && (person == THIRD_PERSON_SINGULAR)) {
if ((tense == IS_TENSE) && (person == THIRD_PERSON) && (number == SINGULAR_NUMBER)) {
if (sense == 1) negated_to_be = vu;
else regular_to_be = vu;
}
@ -257,9 +262,7 @@ what are used by Inform. In assertions:
=
int VerbUsages::allow_in_assertions(verb_conjugation *vc, int tense, int sense, int person) {
if ((tense == IS_TENSE) &&
(sense == 0) &&
((person == THIRD_PERSON_SINGULAR) || (person == THIRD_PERSON_PLURAL)))
if ((tense == IS_TENSE) && (sense == POSITIVE_SENSE) && (person == THIRD_PERSON))
return TRUE;
return FALSE;
}
@ -269,8 +272,8 @@ int VerbUsages::allow_in_assertions(verb_conjugation *vc, int tense, int sense,
=
int VerbUsages::allow_generally(verb_conjugation *vc, int tense, int sense, int person) {
if (((tense == IS_TENSE) || (tense == WAS_TENSE) ||
(tense == HASBEEN_TENSE) || (tense == HADBEEN_TENSE)) &&
((person == THIRD_PERSON_SINGULAR) || (person == THIRD_PERSON_PLURAL)))
(tense == HASBEEN_TENSE) || (tense == HADBEEN_TENSE)) &&
(person == THIRD_PERSON))
return TRUE;
return FALSE;
}
@ -324,9 +327,9 @@ A usage is "foreign" if it belongs to a language other than English:
=
int VerbUsages::is_foreign(verb_usage *vu) {
if ((vu->verb_used) &&
(vu->verb_used->conjugation->defined_in) &&
(vu->verb_used->conjugation->defined_in != DefaultLanguage::get(NULL))) {
verb *v = VerbUsages::get_verb(vu);
if ((v) && (v->conjugation->defined_in) &&
(v->conjugation->defined_in != DefaultLanguage::get(NULL))) {
return TRUE;
}
return FALSE;
@ -337,18 +340,29 @@ int VerbUsages::is_foreign(verb_usage *vu) {
=
VERB_MEANING_LINGUISTICS_TYPE *VerbUsages::get_regular_meaning(verb_usage *vu, preposition *prep, preposition *second_prep) {
if (vu == NULL) return NULL;
VERB_MEANING_LINGUISTICS_TYPE *root = VerbMeanings::get_regular_meaning_of_form(Verbs::find_form(vu->verb_used, prep, second_prep));
if ((root) && (vu->mood == PASSIVE_MOOD) && (root != VERB_MEANING_EQUALITY))
VERB_MEANING_LINGUISTICS_TYPE *root = VerbMeanings::get_regular_meaning_of_form(Verbs::find_form(VerbUsages::get_verb(vu), prep, second_prep));
if ((root) && (VerbUsages::get_mood(vu) == PASSIVE_MOOD) && (root != VERB_MEANING_EQUALITY))
root = VerbMeanings::reverse_VMT(root);
return root;
}
verb *VerbUsages::get_verb(verb_usage *vu) {
// if (vu) return vu->verb_used;
if (vu) return Verbs::from_lcon(vu->grammatical_usage);
return NULL;
}
int VerbUsages::get_mood(verb_usage *vu) {
return Lcon::get_mood(vu->grammatical_usage);
}
int VerbUsages::get_tense_used(verb_usage *vu) {
return vu->tensed;
return Lcon::get_tense(vu->grammatical_usage);
}
int VerbUsages::is_used_negatively(verb_usage *vu) {
return vu->negated_form_of_verb;
if (Lcon::get_sense(vu->grammatical_usage) == NEGATIVE_SENSE) return TRUE;
return FALSE;
}
@h Parsing source text against verb usages.
@ -368,6 +382,13 @@ int VerbUsages::parse_against_verb(wording W, verb_usage *vu) {
return WordAssemblages::parse_as_strictly_initial_text(W, &(vu->vu_text));
}
@ The "permitted verb" is just a piece of temporary context used in parsing:
it's convenient for the verb currently being considered to be stored in
a global variable.
=
verb *permitted_verb = NULL;
@ We now define a whole run of internals to parse verbs. As examples,
>> is
@ -387,7 +408,7 @@ which has a meaning.
<meaningful-nonimperative-verb> internal ? {
verb_usage *vu;
LOOP_OVER_USAGES(vu) {
verb *vi = vu->verb_used;
verb *vi = VerbUsages::get_verb(vu);
for (verb_form *vf = vi->first_form; vf; vf = vf->next_form)
if ((VerbMeanings::is_meaningless(&(vf->list_of_senses->vm)) == FALSE) &&
(vf->form_structures & (SVO_FS_BIT + SVOO_FS_BIT))) {
@ -396,7 +417,7 @@ which has a meaning.
if ((vf->preposition == NULL) ||
(WordAssemblages::is_at(&(vf->preposition->prep_text), i, Wordings::last_wn(W)))) {
*XP = vu;
permitted_verb = vu->verb_used;
permitted_verb = VerbUsages::get_verb(vu);
return i-1;
}
}
@ -414,7 +435,7 @@ and so on.
verb_usage *vu;
if (preform_backtrack) { vu = preform_backtrack; goto BacktrackFrom; }
LOOP_OVER_USAGES(vu) {
if (vu->verb_used == copular_verb) {
if (VerbUsages::get_verb(vu) == copular_verb) {
int i = VerbUsages::parse_against_verb(W, vu);
if ((i>Wordings::first_wn(W)) && (i<=Wordings::last_wn(W))) {
*XP = vu;
@ -435,9 +456,9 @@ not carry" qualifies; "is not" or "supports" don't qualify.
verb_usage *vu;
if (preform_backtrack) { vu = preform_backtrack; goto BacktrackFrom; }
LOOP_OVER_USAGES(vu) {
if ((vu->tensed == IS_TENSE) &&
(vu->verb_used != copular_verb) &&
(vu->negated_form_of_verb == TRUE)) {
if ((VerbUsages::get_tense_used(vu) == IS_TENSE) &&
(VerbUsages::get_verb(vu) != copular_verb) &&
(VerbUsages::is_used_negatively(vu))) {
int i = VerbUsages::parse_against_verb(W, vu);
if ((i>Wordings::first_wn(W)) && (i<=Wordings::last_wn(W))) {
*XP = vu;
@ -476,7 +497,7 @@ Any verb usage which is negative in sense: this is used only to diagnose problem
verb_usage *vu;
if (preform_backtrack) { vu = preform_backtrack; goto BacktrackFrom; }
LOOP_OVER_USAGES(vu) {
if (vu->negated_form_of_verb == TRUE) {
if (VerbUsages::is_used_negatively(vu)) {
int i = VerbUsages::parse_against_verb(W, vu);
if ((i>Wordings::first_wn(W)) && (i<=Wordings::last_wn(W))) {
*XP = vu;
@ -495,7 +516,7 @@ Any verb usage which is negative in sense: this is used only to diagnose problem
verb_usage *vu;
if (preform_backtrack) { vu = preform_backtrack; goto BacktrackFrom; }
LOOP_OVER_USAGES(vu) {
if (vu->tensed != IS_TENSE) {
if (VerbUsages::get_tense_used(vu) != IS_TENSE) {
int i = VerbUsages::parse_against_verb(W, vu);
if ((i>Wordings::first_wn(W)) && (i<=Wordings::last_wn(W))) {
*XP = vu;
@ -516,8 +537,9 @@ uses of verbs:
LOOP_OVER(vc, verb_conjugation)
if (vc->auxiliary_only == FALSE) {
int p = VerbUsages::adaptive_person(vc->defined_in);
word_assemblage *we_form = &(vc->tabulations[ACTIVE_MOOD].vc_text[IS_TENSE][0][p]);
word_assemblage *we_dont_form = &(vc->tabulations[ACTIVE_MOOD].vc_text[IS_TENSE][1][p]);
int n = VerbUsages::adaptive_number(vc->defined_in);
word_assemblage *we_form = &(vc->tabulations[ACTIVE_MOOD].vc_text[IS_TENSE][POSITIVE_SENSE][p][n]);
word_assemblage *we_dont_form = &(vc->tabulations[ACTIVE_MOOD].vc_text[IS_TENSE][NEGATIVE_SENSE][p][n]);
if (WordAssemblages::compare_with_wording(we_form, W)) {
*XP = vc; *X = FALSE; return TRUE;
}
@ -579,9 +601,10 @@ or "the verb to be able to see" use these.
LOOP_OVER(vc, verb_conjugation)
if (vc->auxiliary_only == FALSE) {
int p = VerbUsages::adaptive_person(vc->defined_in);
if (vc->tabulations[ACTIVE_MOOD].modal_auxiliary_usage[IS_TENSE][0][p] != 0) {
word_assemblage *we_form = &(vc->tabulations[ACTIVE_MOOD].vc_text[IS_TENSE][0][p]);
word_assemblage *we_dont_form = &(vc->tabulations[ACTIVE_MOOD].vc_text[IS_TENSE][1][p]);
int n = VerbUsages::adaptive_number(vc->defined_in);
if (vc->tabulations[ACTIVE_MOOD].modal_auxiliary_usage[IS_TENSE][POSITIVE_SENSE][p][n] != 0) {
word_assemblage *we_form = &(vc->tabulations[ACTIVE_MOOD].vc_text[IS_TENSE][POSITIVE_SENSE][p][n]);
word_assemblage *we_dont_form = &(vc->tabulations[ACTIVE_MOOD].vc_text[IS_TENSE][NEGATIVE_SENSE][p][n]);
if (WordAssemblages::compare_with_wording(we_form, W)) {
*XP = vc; *X = FALSE; return TRUE;
}
@ -622,6 +645,14 @@ int VerbUsages::adaptive_person(NATURAL_LANGUAGE_WORDS_TYPE *X) {
return ADAPTIVE_PERSON_LINGUISTICS_CALLBACK(X);
#endif
#ifndef ADAPTIVE_PERSON_LINGUISTICS_CALLBACK
return FIRST_PERSON_PLURAL;
return FIRST_PERSON;
#endif
}
int VerbUsages::adaptive_number(NATURAL_LANGUAGE_WORDS_TYPE *X) {
#ifdef ADAPTIVE_NUMBER_LINGUISTICS_CALLBACK
return ADAPTIVE_NUMBER_LINGUISTICS_CALLBACK(X);
#endif
#ifndef ADAPTIVE_NUMBER_LINGUISTICS_CALLBACK
return PLURAL_NUMBER;
#endif
}

View file

@ -4,7 +4,7 @@ To record the identity and different structural forms of verbs.
@h Verb Identities.
What is a verb? Are the verbs in "Peter is hungry" and "Jane will be in the
Dining Room" the same? How about in "Donald Trump lies on television" and
Dining Room" the same? How about in "Donald Trump lies on the television" and
"My cat Donald lies on the television"? This isn't so easy to answer.
For our purposes two usages of a verbs are "the same verb" if they ultimately
@ -39,6 +39,16 @@ void Verbs::log_item(grammatical_category *cat, general_pointer data) {
Verbs::log_verb(DL, V);
}
verb *Verbs::from_lcon(lcon_ti lcon) {
linguistic_stock_item *item = Stock::from_lcon(lcon);
if (item == NULL) return NULL;
return RETRIEVE_POINTER_verb(item->data);
}
lcon_ti Verbs::to_lcon(verb *v) {
return Stock::to_lcon(v->in_stock);
}
@ Note also that every verb always has a bare form, where no prepositions are
combined with it. This is (initially) meaningless, but it always exists.
@ -258,8 +268,9 @@ in a canonical verbal form. For example, "translate into |+| as".
verb_conjugation *vc = V->conjugation;
if (vc) {
int p = VerbUsages::adaptive_person(vc->defined_in);
word_assemblage we_form = (vc->tabulations[ACTIVE_MOOD].vc_text[IS_TENSE][0][p]);
word_assemblage we_dont_form = (vc->tabulations[ACTIVE_MOOD].vc_text[IS_TENSE][1][p]);
int n = VerbUsages::adaptive_number(vc->defined_in);
word_assemblage we_form = (vc->tabulations[ACTIVE_MOOD].vc_text[IS_TENSE][POSITIVE_SENSE][p][n]);
word_assemblage we_dont_form = (vc->tabulations[ACTIVE_MOOD].vc_text[IS_TENSE][NEGATIVE_SENSE][p][n]);
vf->infinitive_reference_text = vc->infinitive;
vf->pos_reference_text = we_form;
vf->neg_reference_text = we_dont_form;

View file

@ -292,7 +292,7 @@ it's at the front; and if it's "Peter test me with flash cards", we won't
match "test... with..." because it's not at the front.
@<Consider whether this usage is being made at this position@> =
verb *vi = vu->verb_used;
verb *vi = VerbUsages::get_verb(vu);
int i = -1;
wording ISW = EMPTY_WORDING, IOW = EMPTY_WORDING;
int certainty = UNKNOWN_CE, pre_certainty = UNKNOWN_CE, post_certainty = UNKNOWN_CE;
@ -509,7 +509,7 @@ int VerbPhrases::default_verb(int task, parse_node *V, wording *NPs) {
case ACCEPT_SMFT: {
verb_usage *vu = Node::get_verb(V);
verb *vsave = permitted_verb;
permitted_verb = (vu)?vu->verb_used:NULL;
permitted_verb = VerbUsages::get_verb(vu);
if (<nounphrase-as-object>(OW) == FALSE) internal_error("<nounphrase-as-object> failed");
parse_node *O_PN = <<rp>>;

View file

@ -67,7 +67,8 @@ following alphabetical list has references to fuller explanations:
(*) |ADAPTIVE_PERSON_LINGUISTICS_CALLBACK| returns the default person for adaptive
text generation; in Inform, this tends to be the value of the adaptive text viewpoint
property for the natural language of play. See //VerbUsages::adaptive_person//.
property for the natural language of play. Similarly, |ADAPTIVE_NUMBER_LINGUISTICS_CALLBACK|
returns the number (singular or plural). See //VerbUsages::adaptive_person//.
(*) |ADJECTIVE_NAME_VETTING_LINGUISTICS_CALLBACK| should return |TRUE| if the given
name is acceptable as an adjective, and should otherwise print some sort of

View file

@ -15,7 +15,7 @@ verb_conjugation *vc_have = NULL;
=
int Unit::allow_in_assertions(verb_conjugation *vc, int tense, int sense, int person) {
if ((person == THIRD_PERSON_SINGULAR) || (person == THIRD_PERSON_PLURAL)) return TRUE;
if (person == THIRD_PERSON) return TRUE;
return FALSE;
}

View file

@ -13,46 +13,46 @@ ROOT_NT
SENTENCE_NT'sailor = neuter common noun'
HEADING_NT'chapter 2' (level 1)
SENTENCE_NT'jane is a woman'
VERB_NT'is' (relation)
VERB_NT'is' (regular)
PROPER_NOUN_NT'jane' (proper)
COMMON_NOUN_NT'woman' (common)
SENTENCE_NT'she is a person'
VERB_NT'is' (relation)
PROPER_NOUN_NT'she' subject pronoun 3ps(f)
VERB_NT'is' (regular)
PROPER_NOUN_NT'she' subject pronoun 3p s (f)
COMMON_NOUN_NT'person' (common)
SENTENCE_NT'peter carries the torch'
VERB_NT'carries' (relation)
VERB_NT'carries' (regular)
PROPER_NOUN_NT'peter' (proper)
RELATIONSHIP_NT'carries'
PROPER_NOUN_NT'torch' definite article s(n)
PROPER_NOUN_NT'torch' definite article s (n)
SENTENCE_NT'he sees her'
VERB_NT'sees' (relation)
PROPER_NOUN_NT'he' subject pronoun 3ps(m)
VERB_NT'sees' (regular)
PROPER_NOUN_NT'he' subject pronoun 3p s (m)
RELATIONSHIP_NT'sees'
PROPER_NOUN_NT'her' object pronoun 3ps(f)
PROPER_NOUN_NT'her' object pronoun 3p s (f)
SENTENCE_NT'she sees him'
VERB_NT'sees' (relation)
PROPER_NOUN_NT'she' subject pronoun 3ps(f)
VERB_NT'sees' (regular)
PROPER_NOUN_NT'she' subject pronoun 3p s (f)
RELATIONSHIP_NT'sees'
PROPER_NOUN_NT'him' object pronoun 3ps(m)
PROPER_NOUN_NT'him' object pronoun 3p s (m)
SENTENCE_NT'there is a door'
VERB_NT'is' (existential) (relation)
VERB_NT'is' (existential) (regular)
PROPER_NOUN_NT'there'
PROPER_NOUN_NT'door' indefinite article s(n)
PROPER_NOUN_NT'door' indefinite article s (n)
SENTENCE_NT'the sailors carry a cask of rum'
VERB_NT'carry' (relation)
VERB_NT'carry' (regular)
COMMON_NOUN_NT'sailors' (common)
RELATIONSHIP_NT'carry'
PROPER_NOUN_NT'cask of rum' indefinite article s(n)
PROPER_NOUN_NT'cask of rum' indefinite article s (n)
SENTENCE_NT'the shovel has a handle'
VERB_NT'has' (possessive) (relation)
PROPER_NOUN_NT'shovel' definite article s(n)
PROPER_NOUN_NT'handle' indefinite article s(n)
VERB_NT'has' (possessive) (regular)
PROPER_NOUN_NT'shovel' definite article s (n)
PROPER_NOUN_NT'handle' indefinite article s (n)
SENTENCE_NT'the does the player mean rules is a rulebook'
VERB_NT'is' (relation)
PROPER_NOUN_NT'does the player mean rules' definite article s(n)
PROPER_NOUN_NT'rulebook' indefinite article s(n)
VERB_NT'is' (regular)
PROPER_NOUN_NT'does the player mean rules' definite article s (n)
PROPER_NOUN_NT'rulebook' indefinite article s (n)
SENTENCE_NT'some people are here'
VERB_NT'are' (relation)
PROPER_NOUN_NT'people' indefinite article p(n)
VERB_NT'are' (regular)
PROPER_NOUN_NT'people' indefinite article p (n)
PROPER_NOUN_NT'here'