1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-06-29 05:24:57 +03:00

Further work on lexicon

This commit is contained in:
Graham Nelson 2021-07-16 23:25:58 +01:00
parent 6ff39fa3e5
commit 065e67ef0e
14 changed files with 477 additions and 379 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
v10.1.0-alpha.1+6S71 'Krypton' (15 July 2021)
v10.1.0-alpha.1+6S72 'Krypton' (16 July 2021)
## About Inform 7

View file

@ -1,3 +1,3 @@
Prerelease: alpha.1
Build Date: 15 July 2021
Build Number: 6S71
Build Date: 16 July 2021
Build Number: 6S72

View file

@ -317,7 +317,7 @@ of the Inter tree currently being indexed.
<span class="reserved-syntax">inter_lexicon</span><span class="plain-syntax"> *</span><span class="function-syntax">InterpretIndex::get_lexicon</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">InterpretIndex::get_lexicon</span></span>:<br/>Gazetteer Element - <a href="3-ge.html#SP1">&#167;1</a><br/>Lexicon Element - <a href="3-le.html#SP1">&#167;1</a><br/>Verbs Element - <a href="3-ve2.html#SP1">&#167;1</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">indexing_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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">indexing_tree</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no indexing lexicon"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">indexing_lexicon</span><span class="plain-syntax"> = </span><a href="2-lxc.html#SP6" class="function-link"><span class="function-syntax">IndexLexicon::stock</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">indexing_tree</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">indexing_lexicon</span><span class="plain-syntax"> = </span><a href="2-lxc.html#SP3" class="function-link"><span class="function-syntax">IndexLexicon::stock</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">indexing_tree</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">indexing_lexicon</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>

View file

@ -146,7 +146,7 @@ the source text in the application.
</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">IndexUtilities::link</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">IndexUtilities::link</span></span>:<br/>Index Rules - <a href="2-ir.html#SP10_2">&#167;10.2</a>, <a href="2-ir.html#SP14_5">&#167;14.5</a>, <a href="2-ir.html#SP14_7">&#167;14.7</a>, <a href="2-ir.html#SP16">&#167;16</a>, <a href="2-ir.html#SP17">&#167;17</a>, <a href="2-ir.html#SP17_1">&#167;17.1</a><br/>Lexicon - <a href="2-lxc.html#SP5_2">&#167;5.2</a><br/>Arithmetic Element - <a href="3-ae2.html#SP1_3">&#167;1.3</a><br/>Behaviour Element - <a href="3-be.html#SP1">&#167;1</a><br/>Chart Element - <a href="3-ce2.html#SP7">&#167;7</a>, <a href="3-ce2.html#SP8_4">&#167;8.4</a>, <a href="3-ce2.html#SP9_1">&#167;9.1</a><br/>Commands Element - <a href="3-ce3.html#SP4">&#167;4</a><br/>Contents Element - <a href="3-ce4.html#SP1_1_1">&#167;1.1.1</a>, <a href="3-ce4.html#SP2_1">&#167;2.1</a><br/>Events Element - <a href="3-ee.html#SP1_1">&#167;1.1</a>, <a href="3-ee.html#SP1_2">&#167;1.2</a><br/>Figures Element - <a href="3-fe.html#SP1_1">&#167;1.1</a>, <a href="3-fe.html#SP1_2">&#167;1.2</a>, <a href="3-fe.html#SP1_3">&#167;1.3</a><br/>Grouped Element - <a href="3-ge2.html#SP1">&#167;1</a>, <a href="3-ge2.html#SP1_1">&#167;1.1</a>, <a href="3-ge2.html#SP2">&#167;2</a><br/>Innards Element - <a href="3-ie.html#SP2_3">&#167;2.3</a><br/>Map Element - <a href="3-me.html#SP2_5">&#167;2.5</a>, <a href="3-me.html#SP2_8">&#167;2.8</a>, <a href="3-me.html#SP3">&#167;3</a>, <a href="3-me.html#SP7">&#167;7</a><br/>Plot Element - <a href="3-pe2.html#SP1_3_1_1">&#167;1.3.1.1</a>, <a href="3-pe2.html#SP1_3_1_4_2">&#167;1.3.1.4.2</a>, <a href="3-pe2.html#SP1_3_1_4_3">&#167;1.3.1.4.3</a><br/>Relations Element - <a href="3-re.html#SP1">&#167;1</a><br/>Tables Element - <a href="3-te.html#SP1_3">&#167;1.3</a>, <a href="3-te.html#SP1_3_1">&#167;1.3.1</a><br/>Tokens Element - <a href="3-te2.html#SP1">&#167;1</a><br/>Values Element - <a href="3-ve.html#SP1_1_2">&#167;1.1.2</a>, <a href="3-ve.html#SP1_2">&#167;1.2</a><br/>Verbs Element - <a href="3-ve2.html#SP1">&#167;1</a><br/>Spatial Map - <a href="4-sm.html#SP42">&#167;42</a><br/>Render HTML Map - <a href="4-rhm.html#SP12">&#167;12</a></span></button><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">wn</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">IndexUtilities::link</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">IndexUtilities::link</span></span>:<br/>Index Rules - <a href="2-ir.html#SP10_2">&#167;10.2</a>, <a href="2-ir.html#SP14_5">&#167;14.5</a>, <a href="2-ir.html#SP14_7">&#167;14.7</a>, <a href="2-ir.html#SP16">&#167;16</a>, <a href="2-ir.html#SP17">&#167;17</a>, <a href="2-ir.html#SP17_1">&#167;17.1</a><br/>Lexicon - <a href="2-lxc.html#SP6_2">&#167;6.2</a><br/>Arithmetic Element - <a href="3-ae2.html#SP1_3">&#167;1.3</a><br/>Behaviour Element - <a href="3-be.html#SP1">&#167;1</a><br/>Chart Element - <a href="3-ce2.html#SP7">&#167;7</a>, <a href="3-ce2.html#SP8_4">&#167;8.4</a>, <a href="3-ce2.html#SP9_1">&#167;9.1</a><br/>Commands Element - <a href="3-ce3.html#SP4">&#167;4</a><br/>Contents Element - <a href="3-ce4.html#SP1_1_1">&#167;1.1.1</a>, <a href="3-ce4.html#SP2_1">&#167;2.1</a><br/>Events Element - <a href="3-ee.html#SP1_1">&#167;1.1</a>, <a href="3-ee.html#SP1_2">&#167;1.2</a><br/>Figures Element - <a href="3-fe.html#SP1_1">&#167;1.1</a>, <a href="3-fe.html#SP1_2">&#167;1.2</a>, <a href="3-fe.html#SP1_3">&#167;1.3</a><br/>Grouped Element - <a href="3-ge2.html#SP1">&#167;1</a>, <a href="3-ge2.html#SP1_1">&#167;1.1</a>, <a href="3-ge2.html#SP2">&#167;2</a><br/>Innards Element - <a href="3-ie.html#SP2_3">&#167;2.3</a><br/>Map Element - <a href="3-me.html#SP2_5">&#167;2.5</a>, <a href="3-me.html#SP2_8">&#167;2.8</a>, <a href="3-me.html#SP3">&#167;3</a>, <a href="3-me.html#SP7">&#167;7</a><br/>Plot Element - <a href="3-pe2.html#SP1_3_1_1">&#167;1.3.1.1</a>, <a href="3-pe2.html#SP1_3_1_4_2">&#167;1.3.1.4.2</a>, <a href="3-pe2.html#SP1_3_1_4_3">&#167;1.3.1.4.3</a><br/>Relations Element - <a href="3-re.html#SP1">&#167;1</a><br/>Tables Element - <a href="3-te.html#SP1_3">&#167;1.3</a>, <a href="3-te.html#SP1_3_1">&#167;1.3.1</a><br/>Tokens Element - <a href="3-te2.html#SP1">&#167;1</a><br/>Values Element - <a href="3-ve.html#SP1_1_2">&#167;1.1.2</a>, <a href="3-ve.html#SP1_2">&#167;1.2</a><br/>Verbs Element - <a href="3-ve2.html#SP1">&#167;1</a><br/>Spatial Map - <a href="4-sm.html#SP42">&#167;42</a><br/>Render HTML Map - <a href="4-rhm.html#SP12">&#167;12</a></span></button><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">wn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-iu.html#SP2" class="function-link"><span class="function-syntax">IndexUtilities::link_to_location</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lexer::word_location</span><span class="plain-syntax">(</span><span class="identifier-syntax">wn</span><span class="plain-syntax">), </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
@ -205,7 +205,7 @@ code.
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"name=%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">); </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">IndexUtilities::below_link_numbered</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">IndexUtilities::below_link_numbered</span></span>:<br/>Lexicon - <a href="2-lxc.html#SP5_2">&#167;5.2</a><br/>Chart Element - <a href="3-ce2.html#SP5">&#167;5</a><br/>Phrasebook Element - <a href="3-pe.html#SP1">&#167;1</a><br/>Plot Element - <a href="3-pe2.html#SP2_2">&#167;2.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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">IndexUtilities::below_link_numbered</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">IndexUtilities::below_link_numbered</span></span>:<br/>Lexicon - <a href="2-lxc.html#SP6_2">&#167;6.2</a><br/>Chart Element - <a href="3-ce2.html#SP5">&#167;5</a><br/>Phrasebook Element - <a href="3-pe.html#SP1">&#167;1</a><br/>Plot Element - <a href="3-pe2.html#SP2_2">&#167;2.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">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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;nbsp;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">, </span><span class="string-syntax">"href=#A%d"</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">HTML_TAG_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"img"</span><span class="plain-syntax">, </span><span class="string-syntax">"border=0 src=inform:/doc_images/Below.png"</span><span class="plain-syntax">);</span>

View file

@ -266,7 +266,7 @@ working on localisation files can see any defects by looking at the debugging lo
<span class="plain-syntax"> </span><a href="2-lcl.html#SP6" class="function-link"><span class="function-syntax">Localisation::write_general</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">D</span><span class="plain-syntax">, </span><span class="identifier-syntax">context</span><span class="plain-syntax">, </span><span class="identifier-syntax">key</span><span class="plain-syntax">, </span><span class="identifier-syntax">vals</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">Localisation::write_1</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">Localisation::write_1</span></span>:<br/>Index Rules - <a href="2-ir.html#SP14_1">&#167;14.1</a>, <a href="2-ir.html#SP17">&#167;17</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">localisation_dictionary</span><span class="plain-syntax"> *</span><span class="identifier-syntax">D</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Localisation::write_1</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">Localisation::write_1</span></span>:<br/>Index Rules - <a href="2-ir.html#SP14_1">&#167;14.1</a>, <a href="2-ir.html#SP17">&#167;17</a><br/>Lexicon - <a href="2-lxc.html#SP6_1">&#167;6.1</a>, <a href="2-lxc.html#SP6_3">&#167;6.3</a>, <a href="2-lxc.html#SP6_6">&#167;6.6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">localisation_dictionary</span><span class="plain-syntax"> *</span><span class="identifier-syntax">D</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">context</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">key</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val1</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vals</span><span class="plain-syntax">[10];</span>

View file

@ -20,6 +20,11 @@ function togglePopup(material_id) {
</script>
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script src="http://code.jquery.com/jquery-1.12.4.min.js"
integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
<script src="../docs-assets/Bigfoot.js"></script>
<link href="../docs-assets/Bigfoot.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
@ -72,7 +77,7 @@ function togglePopup(material_id) {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inter Modules</a></li><li><a href="index.html">index</a></li><li><a href="index.html#2">Chapter 2: Utilities</a></li><li><b>Lexicon</b></li></ul></div>
<p class="purpose">A lexicon for nouns, adjectives and verbs found in an Inter tree.</p>
<ul class="toc"><li><a href="2-lxc.html#SP4">&#167;4. Printing the lexicon out in HTML format</a></li><li><a href="2-lxc.html#SP6">&#167;6. Index tabulation</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="2-lxc.html#SP3">&#167;3. Creating a lexicon</a></li><li><a href="2-lxc.html#SP6">&#167;6. Listing a lexicon</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>The lexicon is the part of the Index which gives an alphabetised list of
adjectives, nouns, verbs and other words which can be used in descriptions
@ -102,289 +107,133 @@ under a single umbrella:
<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">index_lexicon_entry</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure index_lexicon_entry is accessed in 3/ve2 and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>A lexicon is then a set of entries. These are accumulated in no particular
order, then sorted.
</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">inter_lexicon</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">unsorted</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">first</span><span class="plain-syntax">; </span><span class="comment-syntax"> head of list 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">inter_lexicon</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure index_lexicon_entry is accessed in 3/ve2 and here.</li><li>The structure inter_lexicon is accessed in 3/ve2 and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>Lexicon entries are created by the following routine:
<ul class="endnotetexts"><li>The structure inter_lexicon is accessed in 3/ve2 and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. Creating a lexicon. </b>And this is where that happens:
</p>
<pre class="displayed-code all-displayed-code code-font">
<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-lxc.html#SP3">&#167;3</a>, <a href="2-lxc.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lemma</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><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">lemma</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">lemma</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">entry_refers_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL_GENERAL_POINTER</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">NULL</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">NULL</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">reduced_to_lower_case</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">lex_package</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">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">link_to</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">lex</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lemma</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="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">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><a href="2-lxc.html#SP2" class="function-link"><span class="function-syntax">IndexLexicon::lexicon_new_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">lemma</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">lemma</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lemma</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">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-lxc.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</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="identifier-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pack</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-lxc.html#SP2" class="function-link"><span class="function-syntax">IndexLexicon::lexicon_new_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</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">lemma</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">category</span><span class="plain-syntax"> = </span><span class="string-syntax">"verb"</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">lex_package</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pack</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>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Printing the lexicon out in HTML format. </b></p>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>Now for the bulk of the work. Entries appear in CSS paragraphs with hanging
indentation and no interparagraph spacing, so we need to insert regular
paragraphs between the As and the Bs, then between the Bs and the Cs, and so
on. Each entry consists of the wording, then maybe some icons, then an
explanation of what it is: for instance,
</p>
<blockquote>
<p>player's holdall [icon]\quad {\it noun, a kind of} container</p>
</blockquote>
<p class="commentary">In a few cases, there is a further textual gloss to add.
</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::listing</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::listing</span></span>:<br/>Gazetteer Element - <a href="3-ge.html#SP1">&#167;1</a><br/>Lexicon Element - <a href="3-le.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_lexicon</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lexicon</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">proper_nouns_only</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">proper_noun_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">lexicon</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">first</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">PROPER_NOUN_TLEXE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">proper_noun_count</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">proper_nouns_only</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</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">0</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">HTML::first_html_column</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">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="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lexicon</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">first</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">proper_nouns_only</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">PROPER_NOUN_TLEXE</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">else</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">PROPER_NOUN_TLEXE</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">proper_nouns_only</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="identifier-syntax">proper_noun_count</span><span class="plain-syntax">/2)) </span><span class="identifier-syntax">HTML::next_html_column</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_initial_letter</span><span class="plain-syntax"> != </span><span class="identifier-syntax">Str::get_first_char</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</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="identifier-syntax">current_initial_letter</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_first_char</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="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"hang\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP5_1" class="named-paragraph-link"><span class="named-paragraph">Text of the actual lexicon entry</span><span class="named-paragraph-number">5.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP5_2" class="named-paragraph-link"><span class="named-paragraph">Icon with link to documentation, source or verb table, if any</span><span class="named-paragraph-number">5.2</span></a></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">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">part_of_speech</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">ADJECTIVAL_PHRASE_TLEXE:</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP5_5" class="named-paragraph-link"><span class="named-paragraph">Definition of adjectival phrase entry</span><span class="named-paragraph-number">5.5</span></a></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">ENUMERATED_CONSTANT_TLEXE:</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP5_6" class="named-paragraph-link"><span class="named-paragraph">Definition of enumerated instance entry</span><span class="named-paragraph-number">5.6</span></a></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">PROPER_NOUN_TLEXE:</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP5_4" class="named-paragraph-link"><span class="named-paragraph">Definition of proper noun entry</span><span class="named-paragraph-number">5.4</span></a></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">COMMON_NOUN_TLEXE:</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP5_3" class="named-paragraph-link"><span class="named-paragraph">Definition of common noun entry</span><span class="named-paragraph-number">5.3</span></a></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">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">gloss_note</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" &lt;i&gt;%s&lt;/i&gt;"</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="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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">proper_nouns_only</span><span class="plain-syntax">) { </span><span class="identifier-syntax">HTML::end_html_row</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">); </span><span class="identifier-syntax">HTML::end_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">); }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5_1" class="paragraph-anchor"></a><b>&#167;5.1. </b>In traditional dictionary fashion, we present the text in what may not be
the most normal ordering, in order to place the alphabetically important
part first: thus "see, to be able to" rather than "to be able to see".
(Compare "Gallifreyan High Council, continual incidences of madness and
treachery amongst the" in "Doctor Who: The Completely Useless
Encyclopaedia", eds. Howarth and Lyons (1996).)
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Text of the actual lexicon entry</span><span class="named-paragraph-number">5.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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">lemma</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">PREP_TLEXE</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", to be"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_2" class="paragraph-anchor"></a><b>&#167;5.2. </b>Main lexicon entries to do with verbs link further down the index page
to the corresponding entries in the verb table. We want to use numbered
anchors for these links, but we want to avoid colliding with numbered
anchors already used for other purposes higher up on the Phrasebook index
page. So we use a set of anchors numbered 10000 and up, which is guaranteed
not to coincide with any of those.
</p>
<p class="commentary">We omit source links to an adjectival phrase because these are polymorphic,
that is, the phrase may have multiple definitions in different parts of the
source text: so any single link would be potentially misleading.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Icon with link to documentation, source or verb table, if any</span><span class="named-paragraph-number">5.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">switch</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="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">COMMON_NOUN_TLEXE:</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ref</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Metadata::read_optional_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">lex_package</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^documentation"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">ref</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">IndexUtilities::DocReferences::link</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">ref</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">VERB_TLEXE:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PREP_TLEXE:</span>
<span class="plain-syntax"> </span><a href="2-iu.html#SP4" class="function-link"><span class="function-syntax">IndexUtilities::below_link_numbered</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">10000</span><span class="plain-syntax">+</span><span class="identifier-syntax">verb_count</span><span class="plain-syntax">++);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">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">ADJECTIVAL_PHRASE_TLEXE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">link_to</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><a href="2-iu.html#SP2" class="function-link"><span class="function-syntax">IndexUtilities::link</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">link_to</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_3" class="paragraph-anchor"></a><b>&#167;5.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Definition of common noun entry</span><span class="named-paragraph-number">5.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP5_3_1" class="named-paragraph-link"><span class="named-paragraph">Begin definition text</span><span class="named-paragraph-number">5.3.1</span></a></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">", a kind of "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">superk</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Metadata::read_optional_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">lex_package</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^index_superkind"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">superk</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">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">superk</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP5_3_2" class="named-paragraph-link"><span class="named-paragraph">End definition text</span><span class="named-paragraph-number">5.3.2</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_4" class="paragraph-anchor"></a><b>&#167;5.4. </b>Simply the name of an instance.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Definition of proper noun entry</span><span class="named-paragraph-number">5.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP5_3_1" class="named-paragraph-link"><span class="named-paragraph">Begin definition text</span><span class="named-paragraph-number">5.3.1</span></a></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">Metadata::read_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">lex_package</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^index_kind"</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP5_3_2" class="named-paragraph-link"><span class="named-paragraph">End definition text</span><span class="named-paragraph-number">5.3.2</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_5" class="paragraph-anchor"></a><b>&#167;5.5. </b>As mentioned above, an adjectival phrase can be multiply defined in
different contexts. We want to quote all of those.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Definition of adjectival phrase entry</span><span class="named-paragraph-number">5.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP5_3_1" class="named-paragraph-link"><span class="named-paragraph">Begin definition text</span><span class="named-paragraph-number">5.3.1</span></a></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">Metadata::read_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">lex_package</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^index_entry"</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP5_3_2" class="named-paragraph-link"><span class="named-paragraph">End definition text</span><span class="named-paragraph-number">5.3.2</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_6" class="paragraph-anchor"></a><b>&#167;5.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Definition of enumerated instance entry</span><span class="named-paragraph-number">5.6</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP5_3_1" class="named-paragraph-link"><span class="named-paragraph">Begin definition text</span><span class="named-paragraph-number">5.3.1</span></a></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">", value of %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Metadata::read_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">lex_package</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^index_kind"</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP5_3_2" class="named-paragraph-link"><span class="named-paragraph">End definition text</span><span class="named-paragraph-number">5.3.2</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_3_1" class="paragraph-anchor"></a><b>&#167;5.3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin definition text</span><span class="named-paragraph-number">5.3.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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" ... &lt;i&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">proper_nouns_only</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp; (</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="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">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">category</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP5_3">&#167;5.3</a>, <a href="2-lxc.html#SP5_4">&#167;5.4</a>, <a href="2-lxc.html#SP5_5">&#167;5.5</a>, <a href="2-lxc.html#SP5_6">&#167;5.6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_3_2" class="paragraph-anchor"></a><b>&#167;5.3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">End definition text</span><span class="named-paragraph-number">5.3.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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;/i&gt;"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP5_3">&#167;5.3</a>, <a href="2-lxc.html#SP5_4">&#167;5.4</a>, <a href="2-lxc.html#SP5_5">&#167;5.5</a>, <a href="2-lxc.html#SP5_6">&#167;5.6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. Index tabulation. </b>The following produces the table of verbs in the Phrasebook Index page.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">inter_lexicon</span><span class="plain-syntax"> *</span><span class="function-syntax">IndexLexicon::stock</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">IndexLexicon::stock</span></span>:<br/>Index Interpreter - <a href="2-ii.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inter_lexicon</span><span class="plain-syntax"> *</span><span class="function-syntax">IndexLexicon::stock</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::stock</span></span>:<br/>Index Interpreter - <a href="2-ii.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree</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">inter_lexicon</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lexicon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_lexicon</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lexicon</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">first</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">lexicon</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">unsorted</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</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">tree_inventory</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inv</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Synoptic::inv</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Add verb entries</span><span class="named-paragraph-number">3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP3_2" class="named-paragraph-link"><span class="named-paragraph">Add preposition entries</span><span class="named-paragraph-number">3.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP3_3" class="named-paragraph-link"><span class="named-paragraph">Add adjective entries</span><span class="named-paragraph-number">3.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP3_4" class="named-paragraph-link"><span class="named-paragraph">Add common noun entries</span><span class="named-paragraph-number">3.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP3_5" class="named-paragraph-link"><span class="named-paragraph">Add proper noun entries</span><span class="named-paragraph-number">3.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP3_6" class="named-paragraph-link"><span class="named-paragraph">Create lower-case forms of all lexicon entries</span><span class="named-paragraph-number">3.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP3_7" class="named-paragraph-link"><span class="named-paragraph">Sort the lexicon into alphabetical order</span><span class="named-paragraph-number">3.7</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">lexicon</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3_1" class="paragraph-anchor"></a><b>&#167;3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Add verb entries</span><span class="named-paragraph-number">3.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">TreeLists::sort</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">verb_nodes</span><span class="plain-syntax">, </span><span class="identifier-syntax">Synoptic::module_order</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">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;TreeLists::len(inv-&gt;</span><span class="identifier-syntax">verb_nodes</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">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pack</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Package::defined_by_frame</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">verb_nodes</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">list</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="identifier-syntax">node</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Metadata::read_numeric</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^meaningless"</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><a href="2-lxc.html#SP3" class="function-link"><span class="function-syntax">IndexLexicon::new_main_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Metadata::read_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^infinitive"</span><span class="plain-syntax">), </span><span class="constant-syntax">MVERB_TLEXE</span><span class="plain-syntax">, </span><span class="identifier-syntax">pack</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><a href="2-lxc.html#SP5" class="function-link"><span class="function-syntax">IndexLexicon::new_entry_with_package</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Metadata::read_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^infinitive"</span><span class="plain-syntax">), </span><span class="constant-syntax">MVERB_TLEXE</span><span class="plain-syntax">, </span><span class="identifier-syntax">pack</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">lex</span><span class="plain-syntax"> = </span><a href="2-lxc.html#SP3" class="function-link"><span class="function-syntax">IndexLexicon::new_main_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Metadata::read_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^infinitive"</span><span class="plain-syntax">), </span><span class="constant-syntax">VERB_TLEXE</span><span class="plain-syntax">, </span><span class="identifier-syntax">pack</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><a href="2-lxc.html#SP5" class="function-link"><span class="function-syntax">IndexLexicon::new_entry_with_package</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Metadata::read_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^infinitive"</span><span class="plain-syntax">), </span><span class="constant-syntax">VERB_TLEXE</span><span class="plain-syntax">, </span><span class="identifier-syntax">pack</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">link_to</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">Metadata::read_numeric</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^at"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">, </span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">lexicon</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">unsorted</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_2" class="paragraph-anchor"></a><b>&#167;3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Add preposition entries</span><span class="named-paragraph-number">3.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">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;TreeLists::len(inv-&gt;</span><span class="identifier-syntax">preposition_nodes</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">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pack</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Package::defined_by_frame</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">preposition_nodes</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">list</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="identifier-syntax">node</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-lxc.html#SP3" class="function-link"><span class="function-syntax">IndexLexicon::new_main_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Metadata::read_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^text"</span><span class="plain-syntax">), </span><span class="constant-syntax">PREP_TLEXE</span><span class="plain-syntax">, </span><span class="identifier-syntax">pack</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-lxc.html#SP5" class="function-link"><span class="function-syntax">IndexLexicon::new_entry_with_package</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Metadata::read_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^text"</span><span class="plain-syntax">), </span><span class="constant-syntax">PREP_TLEXE</span><span class="plain-syntax">, </span><span class="identifier-syntax">pack</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">link_to</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">Metadata::read_numeric</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^at"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_3" class="paragraph-anchor"></a><b>&#167;3.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Add adjective entries</span><span class="named-paragraph-number">3.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">for</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">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;TreeLists::len(inv-&gt;</span><span class="identifier-syntax">adjective_nodes</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">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pack</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Package::defined_by_frame</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">adjective_nodes</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">list</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="identifier-syntax">node</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lemma</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Metadata::read_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-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">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">lemma</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</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-lxc.html#SP2" class="function-link"><span class="function-syntax">IndexLexicon::lexicon_new_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">lemma</span><span class="plain-syntax">, </span><span class="constant-syntax">ADJECTIVAL_PHRASE_TLEXE</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-lxc.html#SP4" class="function-link"><span class="function-syntax">IndexLexicon::new_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">lemma</span><span class="plain-syntax">, </span><span class="constant-syntax">ADJECTIVAL_PHRASE_TLEXE</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">"adjective"</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">lex_package</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pack</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">, </span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">lexicon</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">unsorted</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_4" class="paragraph-anchor"></a><b>&#167;3.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Add common noun entries</span><span class="named-paragraph-number">3.4</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">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;TreeLists::len(inv-&gt;</span><span class="identifier-syntax">kind_nodes</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">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pack</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Package::defined_by_frame</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">kind_nodes</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">list</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="identifier-syntax">node</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">Metadata::read_optional_numeric</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^is_base"</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Metadata::read_optional_numeric</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^is_subkind_of_object"</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-lxc.html#SP2" class="function-link"><span class="function-syntax">IndexLexicon::lexicon_new_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Metadata::read_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^name"</span><span class="plain-syntax">), </span><span class="constant-syntax">COMMON_NOUN_TLEXE</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-lxc.html#SP4" class="function-link"><span class="function-syntax">IndexLexicon::new_entry</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Metadata::read_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^name"</span><span class="plain-syntax">), </span><span class="constant-syntax">COMMON_NOUN_TLEXE</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">link_to</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">Metadata::read_numeric</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^at"</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">lex_package</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pack</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">, </span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">lexicon</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">unsorted</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_5" class="paragraph-anchor"></a><b>&#167;3.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Add proper noun entries</span><span class="named-paragraph-number">3.5</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">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;TreeLists::len(inv-&gt;</span><span class="identifier-syntax">instance_nodes</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">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pack</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Package::defined_by_frame</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">instance_nodes</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">list</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="identifier-syntax">node</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">Metadata::read_optional_numeric</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^is_object"</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-lxc.html#SP2" class="function-link"><span class="function-syntax">IndexLexicon::lexicon_new_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Metadata::read_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^name"</span><span class="plain-syntax">), </span><span class="constant-syntax">PROPER_NOUN_TLEXE</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-lxc.html#SP4" class="function-link"><span class="function-syntax">IndexLexicon::new_entry</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Metadata::read_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^name"</span><span class="plain-syntax">), </span><span class="constant-syntax">PROPER_NOUN_TLEXE</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">link_to</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">Metadata::read_numeric</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^at"</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">lex_package</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pack</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">, </span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">lexicon</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">unsorted</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><a href="2-lxc.html#SP2" class="function-link"><span class="function-syntax">IndexLexicon::lexicon_new_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Metadata::read_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^name"</span><span class="plain-syntax">), </span><span class="constant-syntax">ENUMERATED_CONSTANT_TLEXE</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-lxc.html#SP4" class="function-link"><span class="function-syntax">IndexLexicon::new_entry</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Metadata::read_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^name"</span><span class="plain-syntax">), </span><span class="constant-syntax">ENUMERATED_CONSTANT_TLEXE</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">link_to</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">Metadata::read_numeric</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^at"</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">lex_package</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pack</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">, </span><span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">lexicon</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">unsorted</span><span class="plain-syntax">);</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="2-lxc.html#SP6_1" class="named-paragraph-link"><span class="named-paragraph">Create lower-case forms of all lexicon entries dash</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="2-lxc.html#SP6_2" class="named-paragraph-link"><span class="named-paragraph">Sort the lexicon into alphabetical order dash</span><span class="named-paragraph-number">6.2</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">lexicon</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6_1" class="paragraph-anchor"></a><b>&#167;6.1. </b>Before we can sort the lexicon, we need to turn its disparate forms of name
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_6" class="paragraph-anchor"></a><b>&#167;3.6. </b>Before we can sort the lexicon, we need to turn its disparate forms of name
into a single, canonical, lower-case representation.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create lower-case forms of all lexicon entries dash</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">Create lower-case forms of all lexicon entries</span><span class="named-paragraph-number">3.6</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -395,14 +244,14 @@ into a single, canonical, lower-case representation.
<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>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_2" class="paragraph-anchor"></a><b>&#167;6.2. </b>The lexicon is sorted by insertion sort, which is not ideally fast, but
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_7" class="paragraph-anchor"></a><b>&#167;3.7. </b>The lexicon is sorted by insertion sort, which is not ideally fast, but
which is convenient when dealing with linked lists: there are unlikely to be
more than 1000 or so entries, so the speed penalty for insertion rather
than (say) quicksort is not great.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Sort the lexicon into alphabetical order dash</span><span class="named-paragraph-number">6.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Sort the lexicon into alphabetical order</span><span class="named-paragraph-number">3.7</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -423,7 +272,218 @@ than (say) quicksort is not great.
<span class="plain-syntax"> </span><span class="identifier-syntax">Inserted:</span><span class="plain-syntax"> ;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>Lexicon entries are created by the following function:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="function-syntax">IndexLexicon::new_entry</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_entry</span></span>:<br/><a href="2-lxc.html#SP3_3">&#167;3.3</a>, <a href="2-lxc.html#SP3_4">&#167;3.4</a>, <a href="2-lxc.html#SP3_5">&#167;3.5</a>, <a href="2-lxc.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lemma</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><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">lemma</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">lemma</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">entry_refers_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL_GENERAL_POINTER</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">NULL</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">NULL</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">reduced_to_lower_case</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">lex_package</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">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">link_to</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">lex</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>Or by these specialisations:
</p>
<pre class="displayed-code all-displayed-code code-font">
<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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lemma</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="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">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><a href="2-lxc.html#SP4" class="function-link"><span class="function-syntax">IndexLexicon::new_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">lemma</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">lemma</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lemma</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">index_lexicon_entry</span><span class="plain-syntax"> *</span><span class="function-syntax">IndexLexicon::new_entry_with_package</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::new_entry_with_package</span></span>:<br/><a href="2-lxc.html#SP3_1">&#167;3.1</a>, <a href="2-lxc.html#SP3_2">&#167;3.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">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="identifier-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pack</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-lxc.html#SP4" class="function-link"><span class="function-syntax">IndexLexicon::new_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</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">lemma</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">category</span><span class="plain-syntax"> = </span><span class="string-syntax">"verb"</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">lex_package</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pack</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>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. Listing a lexicon. </b>Now for the bulk of the work. Entries appear in HTML paragraphs with hanging
indentation and no interparagraph spacing, so we need to insert regular
paragraphs between the As and the Bs, then between the Bs and the Cs, and so on.
Each entry consists of the wording, then maybe some icons, then an explanation
of what it is: for instance,
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">player's holdall [icon] noun, a kind of container</span>
</pre>
<p class="commentary">In a few cases, there is a further textual gloss to add.
</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::listing</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">IndexLexicon::listing</span></span>:<br/>Gazetteer Element - <a href="3-ge.html#SP1">&#167;1</a><br/>Lexicon Element - <a href="3-le.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_lexicon</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lexicon</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">proper_nouns_only</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">localisation_dictionary</span><span class="plain-syntax"> *</span><span class="identifier-syntax">LD</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_LINKED_LIST</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="identifier-syntax">lexicon</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">unsorted</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">"%S: %d\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">lemma</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="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">proper_noun_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">lexicon</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">first</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">PROPER_NOUN_TLEXE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">proper_noun_count</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">proper_nouns_only</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::begin_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</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">0</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">HTML::first_html_column</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">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="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">lex</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lexicon</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">first</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">proper_nouns_only</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">PROPER_NOUN_TLEXE</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">else</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">PROPER_NOUN_TLEXE</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">proper_nouns_only</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="identifier-syntax">proper_noun_count</span><span class="plain-syntax">/2)) </span><span class="identifier-syntax">HTML::next_html_column</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_initial_letter</span><span class="plain-syntax"> != </span><span class="identifier-syntax">Str::get_first_char</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</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="identifier-syntax">current_initial_letter</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_first_char</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="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"hang\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP6_1" class="named-paragraph-link"><span class="named-paragraph">Text of the actual lexicon entry</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="2-lxc.html#SP6_2" class="named-paragraph-link"><span class="named-paragraph">Icon with link to documentation, source or verb table, if any</span><span class="named-paragraph-number">6.2</span></a></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">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">part_of_speech</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">ADJECTIVAL_PHRASE_TLEXE:</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP6_5" class="named-paragraph-link"><span class="named-paragraph">Definition of adjectival phrase entry</span><span class="named-paragraph-number">6.5</span></a></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">ENUMERATED_CONSTANT_TLEXE:</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP6_6" class="named-paragraph-link"><span class="named-paragraph">Definition of enumerated instance entry</span><span class="named-paragraph-number">6.6</span></a></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">PROPER_NOUN_TLEXE:</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP6_4" class="named-paragraph-link"><span class="named-paragraph">Definition of proper noun entry</span><span class="named-paragraph-number">6.4</span></a></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">COMMON_NOUN_TLEXE:</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP6_3" class="named-paragraph-link"><span class="named-paragraph">Definition of common noun entry</span><span class="named-paragraph-number">6.3</span></a></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">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">gloss_note</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" &lt;i&gt;%s&lt;/i&gt;"</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="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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">proper_nouns_only</span><span class="plain-syntax">) { </span><span class="identifier-syntax">HTML::end_html_row</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">); </span><span class="identifier-syntax">HTML::end_html_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">); }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6_1" class="paragraph-anchor"></a><b>&#167;6.1. </b>In traditional dictionary fashion, we present the text in what may not be
the most normal ordering, in order to place the alphabetically important
part first: thus "see, to be able to" rather than "to be able to see".<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>
</p>
<ul class="footnotetexts"><li class="footnote" id="fn:1"><p class="inwebfootnote"><sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> Compare "Gallifreyan High Council, continual incidences of madness and
treachery amongst the" in "Doctor Who: The Completely Useless Encyclopaedia",
eds. Howarth and Lyons (1996).
<a href="#fnref:1" title="return to text"> &#x21A9;</a></p></li></ul>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Text of the actual lexicon entry</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">
<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">PREP_TLEXE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-lcl.html#SP5" class="function-link"><span class="function-syntax">Localisation::write_1</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">LD</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Lx"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"ToBe"</span><span class="plain-syntax">, </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">lemma</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">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">lemma</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_2" class="paragraph-anchor"></a><b>&#167;6.2. </b>Main lexicon entries to do with verbs link further down the index page
to the corresponding entries in the verb table. We want to use numbered
anchors for these links, but we want to avoid colliding with numbered
anchors already used for other purposes higher up on the Phrasebook index
page. So we use a set of anchors numbered 10000 and up, which is guaranteed
not to coincide with any of those.
</p>
<p class="commentary">We omit source links to an adjectival phrase because these are polymorphic,
that is, the phrase may have multiple definitions in different parts of the
source text: so any single link would be potentially misleading.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Icon with link to documentation, source or verb table, if any</span><span class="named-paragraph-number">6.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">switch</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="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">COMMON_NOUN_TLEXE:</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ref</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Metadata::read_optional_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">lex_package</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^documentation"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">ref</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">IndexUtilities::DocReferences::link</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">ref</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">VERB_TLEXE:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PREP_TLEXE:</span>
<span class="plain-syntax"> </span><a href="2-iu.html#SP4" class="function-link"><span class="function-syntax">IndexUtilities::below_link_numbered</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">10000</span><span class="plain-syntax">+</span><span class="identifier-syntax">verb_count</span><span class="plain-syntax">++);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">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">ADJECTIVAL_PHRASE_TLEXE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">link_to</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><a href="2-iu.html#SP2" class="function-link"><span class="function-syntax">IndexUtilities::link</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">link_to</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_3" class="paragraph-anchor"></a><b>&#167;6.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Definition of common noun entry</span><span class="named-paragraph-number">6.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP6_3_1" class="named-paragraph-link"><span class="named-paragraph">Begin definition text</span><span class="named-paragraph-number">6.3.1</span></a></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><a href="2-lcl.html#SP5" class="function-link"><span class="function-syntax">Localisation::write_1</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">LD</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Lx"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"KindOf"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Metadata::read_optional_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">lex_package</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^index_superkind"</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP6_3_2" class="named-paragraph-link"><span class="named-paragraph">End definition text</span><span class="named-paragraph-number">6.3.2</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_4" class="paragraph-anchor"></a><b>&#167;6.4. </b>Simply the name of an instance.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Definition of proper noun entry</span><span class="named-paragraph-number">6.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP6_3_1" class="named-paragraph-link"><span class="named-paragraph">Begin definition text</span><span class="named-paragraph-number">6.3.1</span></a></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">Metadata::read_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">lex_package</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^index_kind"</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP6_3_2" class="named-paragraph-link"><span class="named-paragraph">End definition text</span><span class="named-paragraph-number">6.3.2</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_5" class="paragraph-anchor"></a><b>&#167;6.5. </b>As mentioned above, an adjectival phrase can be multiply defined in
different contexts. We want to quote all of those.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Definition of adjectival phrase entry</span><span class="named-paragraph-number">6.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP6_3_1" class="named-paragraph-link"><span class="named-paragraph">Begin definition text</span><span class="named-paragraph-number">6.3.1</span></a></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">Metadata::read_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">lex_package</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^index_entry"</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP6_3_2" class="named-paragraph-link"><span class="named-paragraph">End definition text</span><span class="named-paragraph-number">6.3.2</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_6" class="paragraph-anchor"></a><b>&#167;6.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Definition of enumerated instance entry</span><span class="named-paragraph-number">6.6</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP6_3_1" class="named-paragraph-link"><span class="named-paragraph">Begin definition text</span><span class="named-paragraph-number">6.3.1</span></a></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><a href="2-lcl.html#SP5" class="function-link"><span class="function-syntax">Localisation::write_1</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">LD</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Lx"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"ValueOf"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Metadata::read_optional_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">lex_package</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^index_kind"</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lxc.html#SP6_3_2" class="named-paragraph-link"><span class="named-paragraph">End definition text</span><span class="named-paragraph-number">6.3.2</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_3_1" class="paragraph-anchor"></a><b>&#167;6.3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin definition text</span><span class="named-paragraph-number">6.3.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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" ... &lt;i&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">proper_nouns_only</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp; (</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="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">lex</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">category</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP6_3">&#167;6.3</a>, <a href="2-lxc.html#SP6_4">&#167;6.4</a>, <a href="2-lxc.html#SP6_5">&#167;6.5</a>, <a href="2-lxc.html#SP6_6">&#167;6.6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_3_2" class="paragraph-anchor"></a><b>&#167;6.3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">End definition text</span><span class="named-paragraph-number">6.3.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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;/i&gt;"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lxc.html#SP6_3">&#167;6.3</a>, <a href="2-lxc.html#SP6_4">&#167;6.4</a>, <a href="2-lxc.html#SP6_5">&#167;6.5</a>, <a href="2-lxc.html#SP6_6">&#167;6.6</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-ir.html">&#10094;</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-il.html">il</a></li><li class="progresssection"><a href="2-lcl.html">lcl</a></li><li class="progresssection"><a href="2-ii.html">ii</a></li><li class="progresssection"><a href="2-sas.html">sas</a></li><li class="progresssection"><a href="2-iu.html">iu</a></li><li class="progresssection"><a href="2-ir.html">ir</a></li><li class="progresscurrent">lxc</li><li class="progresssection"><a href="2-fi.html">fi</a></li><li class="progresschapter"><a href="3-tpt.html">3</a></li><li class="progresschapter"><a href="4-mc.html">4</a></li><li class="progressnext"><a href="2-fi.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -76,7 +76,7 @@ function togglePopup(material_id) {
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">GazetteerElement::render</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">GazetteerElement::render</span></span>:<br/>The Periodic Table - <a href="3-tpt.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">localisation_dictionary</span><span class="plain-syntax"> *</span><span class="identifier-syntax">LD</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-lxc.html#SP5" class="function-link"><span class="function-syntax">IndexLexicon::listing</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><a href="2-ii.html#SP6" class="function-link"><span class="function-syntax">InterpretIndex::get_lexicon</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-lxc.html#SP6" class="function-link"><span class="function-syntax">IndexLexicon::listing</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><a href="2-ii.html#SP6" class="function-link"><span class="function-syntax">InterpretIndex::get_lexicon</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">LD</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">

View file

@ -88,7 +88,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="string-syntax">"with rules like 'Instead of taking an empty container, ...'."</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">"span"</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><a href="2-lxc.html#SP5" class="function-link"><span class="function-syntax">IndexLexicon::listing</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><a href="2-ii.html#SP6" class="function-link"><span class="function-syntax">InterpretIndex::get_lexicon</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-lxc.html#SP6" class="function-link"><span class="function-syntax">IndexLexicon::listing</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><a href="2-ii.html#SP6" class="function-link"><span class="function-syntax">InterpretIndex::get_lexicon</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">LD</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">

View file

@ -1,4 +1,4 @@
Total memory consumption was 391656K = 382 MB
Total memory consumption was 391657K = 382 MB
60.4% was used for 1994826 objects, in 371044 frames in 296 x 800K = 236800K = 231 MB:
@ -236,7 +236,7 @@ Total memory consumption was 391656K = 382 MB
39.5% was used for memory not allocated for objects:
20.6% text stream storage 82730420 bytes in 530434 claims
20.6% text stream storage 82731264 bytes in 530442 claims
4.5% dictionary storage 18153472 bytes in 33229 claims
---- sorting 744 bytes in 3 claims
1.7% source text 7200000 bytes in 3 claims

View file

@ -1,27 +1,27 @@
100.0% in inform7 run
57.5% in compilation to Inter
41.2% in //Sequence::undertake_queued_tasks//
56.0% in compilation to Inter
39.4% in //Sequence::undertake_queued_tasks//
3.7% in //MajorNodes::pre_pass//
2.7% in //MajorNodes::pass_1//
2.8% in //MajorNodes::pass_1//
2.0% in //RTPhrasebook::compile_entries//
1.5% in //ImperativeDefinitions::assess_all//
1.4% in //ImperativeDefinitions::assess_all//
1.1% in //RTKindConstructors::compile//
0.4% in //ImperativeDefinitions::compile_first_block//
0.4% in //MajorNodes::pass_2//
0.4% in //Sequence::undertake_queued_tasks//
0.4% in //Sequence::undertake_queued_tasks//
0.4% in //World::stage_V//
0.2% in //CompletionModule::compile//
0.2% in //Sequence::undertake_queued_tasks//
0.1% in //CompletionModule::compile//
0.1% in //InferenceSubjects::emit_all//
0.1% in //RTKindConstructors::compile_permissions//
0.1% in //Task::make_built_in_kind_constructors//
0.1% in //World::stages_II_and_III//
2.1% not specifically accounted for
40.4% in running Inter pipeline
11.0% in step preparation
9.4% in inter step 7/14: consolidate-text
7.8% in inter step 2/14: link
6.8% in inter step 14/14: generate inform6 -> auto.inf
2.4% not specifically accounted for
42.0% in running Inter pipeline
11.3% in step preparation
9.9% in inter step 7/14: consolidate-text
8.0% in inter step 2/14: link
7.0% in inter step 14/14: generate inform6 -> auto.inf
1.4% in inter step 10/14: make-identifiers-unique
0.4% in inter step 11/14: reconcile-verbs
0.2% in inter step 13/14: eliminate-redundant-operations
@ -31,6 +31,6 @@
0.1% in inter step 12/14: eliminate-redundant-labels
0.1% in inter step 4/14: parse-linked-matter
0.1% in inter step 5/14: resolve-conditional-compilation
1.8% not specifically accounted for
1.8% in supervisor
0.2% not specifically accounted for
2.1% not specifically accounted for
1.6% in supervisor
0.3% not specifically accounted for

View file

@ -93,6 +93,10 @@
%Title = Lexicon
%Heading = Words used in descriptions|About descriptions<DESCRIPTIONS>
%ToBe = *1, to be
%KindOf = a kind of *1
%ValueOf = value of *1
%%Rl
%Title = Relations

View file

@ -30,16 +30,142 @@ typedef struct index_lexicon_entry {
CLASS_DEFINITION
} index_lexicon_entry;
@ A lexicon is then a set of entries. These are accumulated in no particular
order, then sorted.
=
typedef struct inter_lexicon {
struct linked_list *unsorted;
index_lexicon_entry *first; /* head of list in lexicographic order */
CLASS_DEFINITION
} inter_lexicon;
@ Lexicon entries are created by the following routine:
@h Creating a lexicon.
And this is where that happens:
=
index_lexicon_entry *IndexLexicon::lexicon_new_entry(text_stream *lemma, int part) {
inter_lexicon *IndexLexicon::stock(inter_tree *I) {
inter_lexicon *lexicon = CREATE(inter_lexicon);
lexicon->first = NULL;
lexicon->unsorted = NEW_LINKED_LIST(index_lexicon_entry);
tree_inventory *inv = Synoptic::inv(I);
@<Add verb entries@>;
@<Add preposition entries@>;
@<Add adjective entries@>;
@<Add common noun entries@>;
@<Add proper noun entries@>;
@<Create lower-case forms of all lexicon entries@>;
@<Sort the lexicon into alphabetical order@>;
return lexicon;
}
@<Add verb entries@> =
TreeLists::sort(inv->verb_nodes, Synoptic::module_order);
for (int i=0; i<TreeLists::len(inv->verb_nodes); i++) {
inter_package *pack = Inter::Package::defined_by_frame(inv->verb_nodes->list[i].node);
index_lexicon_entry *lex;
if (Metadata::read_numeric(pack, I"^meaningless"))
lex = IndexLexicon::new_entry_with_package(
Metadata::read_textual(pack, I"^infinitive"), MVERB_TLEXE, pack);
else
lex = IndexLexicon::new_entry_with_package(
Metadata::read_textual(pack, I"^infinitive"), VERB_TLEXE, pack);
lex->link_to = (int) Metadata::read_numeric(pack, I"^at");
ADD_TO_LINKED_LIST(lex, index_lexicon_entry, lexicon->unsorted);
}
@<Add preposition entries@> =
for (int i=0; i<TreeLists::len(inv->preposition_nodes); i++) {
inter_package *pack = Inter::Package::defined_by_frame(inv->preposition_nodes->list[i].node);
index_lexicon_entry *lex = IndexLexicon::new_entry_with_package(
Metadata::read_textual(pack, I"^text"), PREP_TLEXE, pack);
lex->link_to = (int) Metadata::read_numeric(pack, I"^at");
}
@<Add adjective entries@> =
for (int i=0; i<TreeLists::len(inv->adjective_nodes); i++) {
inter_package *pack = Inter::Package::defined_by_frame(inv->adjective_nodes->list[i].node);
text_stream *lemma = Metadata::read_textual(pack, I"^text");
if (Str::len(lemma) > 0) {
index_lexicon_entry *lex = IndexLexicon::new_entry(lemma, ADJECTIVAL_PHRASE_TLEXE);
lex->category = "adjective";
lex->lex_package = pack;
ADD_TO_LINKED_LIST(lex, index_lexicon_entry, lexicon->unsorted);
}
}
@<Add common noun entries@> =
for (int i=0; i<TreeLists::len(inv->kind_nodes); i++) {
inter_package *pack = Inter::Package::defined_by_frame(inv->kind_nodes->list[i].node);
if ((Metadata::read_optional_numeric(pack, I"^is_base")) &&
(Metadata::read_optional_numeric(pack, I"^is_subkind_of_object"))) {
index_lexicon_entry *lex = IndexLexicon::new_entry(
Metadata::read_textual(pack, I"^name"), COMMON_NOUN_TLEXE);
lex->link_to = (int) Metadata::read_numeric(pack, I"^at");
lex->category = "noun";
lex->lex_package = pack;
ADD_TO_LINKED_LIST(lex, index_lexicon_entry, lexicon->unsorted);
}
}
@<Add proper noun entries@> =
for (int i=0; i<TreeLists::len(inv->instance_nodes); i++) {
inter_package *pack = Inter::Package::defined_by_frame(inv->instance_nodes->list[i].node);
if (Metadata::read_optional_numeric(pack, I"^is_object")) {
index_lexicon_entry *lex = IndexLexicon::new_entry(
Metadata::read_textual(pack, I"^name"), PROPER_NOUN_TLEXE);
lex->link_to = (int) Metadata::read_numeric(pack, I"^at");
lex->category = "noun";
lex->lex_package = pack;
ADD_TO_LINKED_LIST(lex, index_lexicon_entry, lexicon->unsorted);
} else {
index_lexicon_entry *lex = IndexLexicon::new_entry(
Metadata::read_textual(pack, I"^name"), ENUMERATED_CONSTANT_TLEXE);
lex->link_to = (int) Metadata::read_numeric(pack, I"^at");
lex->category = "noun";
lex->lex_package = pack;
ADD_TO_LINKED_LIST(lex, index_lexicon_entry, lexicon->unsorted);
}
}
@ 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@> =
index_lexicon_entry *lex;
LOOP_OVER_LINKED_LIST(lex, index_lexicon_entry, lexicon->unsorted) {
Str::copy(lex->reduced_to_lower_case, lex->lemma);
LOOP_THROUGH_TEXT(pos, lex->reduced_to_lower_case)
Str::put(pos, Characters::tolower(Str::get(pos)));
}
@ The lexicon is sorted by insertion sort, which is not ideally fast, but
which is convenient when dealing with linked lists: there are unlikely to be
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@> =
index_lexicon_entry *lex;
LOOP_OVER_LINKED_LIST(lex, index_lexicon_entry, lexicon->unsorted) {
index_lexicon_entry *lex2, *last_lex;
if (lexicon->first == NULL) {
lexicon->first = lex; lex->sorted_next = NULL; continue;
}
for (last_lex = NULL, lex2 = lexicon->first; lex2;
last_lex = lex2, lex2 = lex2->sorted_next)
if (Str::cmp(lex->reduced_to_lower_case, lex2->reduced_to_lower_case) < 0) {
if (last_lex == NULL) lexicon->first = lex;
else last_lex->sorted_next = lex;
lex->sorted_next = lex2; goto Inserted;
}
last_lex->sorted_next = lex; lex->sorted_next = NULL;
Inserted: ;
}
@ Lexicon entries are created by the following function:
=
index_lexicon_entry *IndexLexicon::new_entry(text_stream *lemma, int part) {
index_lexicon_entry *lex = CREATE(index_lexicon_entry);
lex->lemma = Str::duplicate(lemma);
lex->part_of_speech = part;
@ -51,41 +177,44 @@ index_lexicon_entry *IndexLexicon::lexicon_new_entry(text_stream *lemma, int par
return lex;
}
@
@ Or by these specialisations:
=
index_lexicon_entry *IndexLexicon::new_entry_with_details(text_stream *lemma, int pos,
char *category, char *gloss) {
index_lexicon_entry *lex = IndexLexicon::lexicon_new_entry(lemma, pos);
index_lexicon_entry *lex = IndexLexicon::new_entry(lemma, pos);
lex->lemma = lemma;
lex->category = category; lex->gloss_note = gloss;
return lex;
}
index_lexicon_entry *IndexLexicon::new_main_verb(text_stream *infinitive, int part,
index_lexicon_entry *IndexLexicon::new_entry_with_package(text_stream *infinitive, int part,
inter_package *pack) {
index_lexicon_entry *lex = IndexLexicon::lexicon_new_entry(NULL, part);
index_lexicon_entry *lex = IndexLexicon::new_entry(NULL, part);
lex->lemma = infinitive;
lex->category = "verb";
lex->lex_package = pack;
return lex;
}
@h Printing the lexicon out in HTML format.
@ Now for the bulk of the work. Entries appear in CSS paragraphs with hanging
@h Listing a lexicon.
Now for the bulk of the work. Entries appear in HTML paragraphs with hanging
indentation and no interparagraph spacing, so we need to insert regular
paragraphs between the As and the Bs, then between the Bs and the Cs, and so
on. Each entry consists of the wording, then maybe some icons, then an
explanation of what it is: for instance,
>> player's holdall [icon]\quad {\it noun, a kind of} container
paragraphs between the As and the Bs, then between the Bs and the Cs, and so on.
Each entry consists of the wording, then maybe some icons, then an explanation
of what it is: for instance,
= (text)
player's holdall [icon] noun, a kind of container
=
In a few cases, there is a further textual gloss to add.
=
void IndexLexicon::listing(OUTPUT_STREAM, inter_lexicon *lexicon, int proper_nouns_only) {
void IndexLexicon::listing(OUTPUT_STREAM, inter_lexicon *lexicon, int proper_nouns_only,
localisation_dictionary *LD) {
index_lexicon_entry *lex;
LOOP_OVER_LINKED_LIST(lex, index_lexicon_entry, lexicon->unsorted) {
LOG("%S: %d\n", lex->lemma, lex->part_of_speech);
}
wchar_t current_initial_letter = '?';
int verb_count = 0, proper_noun_count = 0, c;
for (lex = lexicon->first; lex; lex = lex->sorted_next)
@ -127,14 +256,17 @@ void IndexLexicon::listing(OUTPUT_STREAM, inter_lexicon *lexicon, int proper_nou
@ In traditional dictionary fashion, we present the text in what may not be
the most normal ordering, in order to place the alphabetically important
part first: thus "see, to be able to" rather than "to be able to see".
(Compare "Gallifreyan High Council, continual incidences of madness and
treachery amongst the" in "Doctor Who: The Completely Useless
Encyclopaedia", eds. Howarth and Lyons (1996).)
part first: thus "see, to be able to" rather than "to be able to see".[1]
[1] Compare "Gallifreyan High Council, continual incidences of madness and
treachery amongst the" in "Doctor Who: The Completely Useless Encyclopaedia",
eds. Howarth and Lyons (1996).
@<Text of the actual lexicon entry@> =
WRITE("%S", lex->lemma);
if (lex->part_of_speech == PREP_TLEXE) WRITE(", to be");
if (lex->part_of_speech == PREP_TLEXE)
Localisation::write_1(OUT, LD, I"Lx", I"ToBe", lex->lemma);
else
WRITE("%S", lex->lemma);
@ Main lexicon entries to do with verbs link further down the index page
to the corresponding entries in the verb table. We want to use numbered
@ -150,7 +282,8 @@ source text: so any single link would be potentially misleading.
@<Icon with link to documentation, source or verb table, if any@> =
switch(lex->part_of_speech) {
case COMMON_NOUN_TLEXE: {
text_stream *ref = Metadata::read_optional_textual(lex->lex_package, I"^documentation");
text_stream *ref =
Metadata::read_optional_textual(lex->lex_package, I"^documentation");
if (Str::len(ref) > 0) IndexUtilities::DocReferences::link(OUT, ref);
break;
}
@ -164,9 +297,9 @@ source text: so any single link would be potentially misleading.
@<Definition of common noun entry@> =
@<Begin definition text@>;
WRITE(", a kind of ");
text_stream *superk = Metadata::read_optional_textual(lex->lex_package, I"^index_superkind");
if (Str::len(superk) > 0) WRITE("%S", superk);
WRITE(", ");
Localisation::write_1(OUT, LD, I"Lx", I"KindOf",
Metadata::read_optional_textual(lex->lex_package, I"^index_superkind"));
@<End definition text@>;
@ Simply the name of an instance.
@ -186,7 +319,9 @@ different contexts. We want to quote all of those.
@<Definition of enumerated instance entry@> =
@<Begin definition text@>;
WRITE(", value of %S", Metadata::read_textual(lex->lex_package, I"^index_kind"));
WRITE(", ");
Localisation::write_1(OUT, LD, I"Lx", I"ValueOf",
Metadata::read_optional_textual(lex->lex_package, I"^index_kind"));
@<End definition text@>;
@<Begin definition text@> =
@ -196,104 +331,3 @@ different contexts. We want to quote all of those.
@<End definition text@> =
WRITE("</i>");
@h Index tabulation.
The following produces the table of verbs in the Phrasebook Index page.
=
inter_lexicon *IndexLexicon::stock(inter_tree *I) {
inter_lexicon *lexicon = CREATE(inter_lexicon);
lexicon->first = NULL;
lexicon->unsorted = NEW_LINKED_LIST(index_lexicon_entry);
tree_inventory *inv = Synoptic::inv(I);
TreeLists::sort(inv->verb_nodes, Synoptic::module_order);
for (int i=0; i<TreeLists::len(inv->verb_nodes); i++) {
inter_package *pack = Inter::Package::defined_by_frame(inv->verb_nodes->list[i].node);
index_lexicon_entry *lex;
if (Metadata::read_numeric(pack, I"^meaningless"))
lex = IndexLexicon::new_main_verb(Metadata::read_textual(pack, I"^infinitive"), MVERB_TLEXE, pack);
else
lex = IndexLexicon::new_main_verb(Metadata::read_textual(pack, I"^infinitive"), VERB_TLEXE, pack);
lex->link_to = (int) Metadata::read_numeric(pack, I"^at");
ADD_TO_LINKED_LIST(lex, index_lexicon_entry, lexicon->unsorted);
}
for (int i=0; i<TreeLists::len(inv->preposition_nodes); i++) {
inter_package *pack = Inter::Package::defined_by_frame(inv->preposition_nodes->list[i].node);
index_lexicon_entry *lex = IndexLexicon::new_main_verb(Metadata::read_textual(pack, I"^text"), PREP_TLEXE, pack);
lex->link_to = (int) Metadata::read_numeric(pack, I"^at");
}
for (int i=0; i<TreeLists::len(inv->adjective_nodes); i++) {
inter_package *pack = Inter::Package::defined_by_frame(inv->adjective_nodes->list[i].node);
text_stream *lemma = Metadata::read_textual(pack, I"^text");
if (Str::len(lemma) > 0) {
index_lexicon_entry *lex = IndexLexicon::lexicon_new_entry(lemma, ADJECTIVAL_PHRASE_TLEXE);
lex->category = "adjective";
lex->lex_package = pack;
ADD_TO_LINKED_LIST(lex, index_lexicon_entry, lexicon->unsorted);
}
}
for (int i=0; i<TreeLists::len(inv->kind_nodes); i++) {
inter_package *pack = Inter::Package::defined_by_frame(inv->kind_nodes->list[i].node);
if ((Metadata::read_optional_numeric(pack, I"^is_base")) &&
(Metadata::read_optional_numeric(pack, I"^is_subkind_of_object"))) {
index_lexicon_entry *lex = IndexLexicon::lexicon_new_entry(Metadata::read_textual(pack, I"^name"), COMMON_NOUN_TLEXE);
lex->link_to = (int) Metadata::read_numeric(pack, I"^at");
lex->category = "noun";
lex->lex_package = pack;
ADD_TO_LINKED_LIST(lex, index_lexicon_entry, lexicon->unsorted);
}
}
for (int i=0; i<TreeLists::len(inv->instance_nodes); i++) {
inter_package *pack = Inter::Package::defined_by_frame(inv->instance_nodes->list[i].node);
if (Metadata::read_optional_numeric(pack, I"^is_object")) {
index_lexicon_entry *lex = IndexLexicon::lexicon_new_entry(Metadata::read_textual(pack, I"^name"), PROPER_NOUN_TLEXE);
lex->link_to = (int) Metadata::read_numeric(pack, I"^at");
lex->category = "noun";
lex->lex_package = pack;
ADD_TO_LINKED_LIST(lex, index_lexicon_entry, lexicon->unsorted);
} else {
index_lexicon_entry *lex = IndexLexicon::lexicon_new_entry(Metadata::read_textual(pack, I"^name"), ENUMERATED_CONSTANT_TLEXE);
lex->link_to = (int) Metadata::read_numeric(pack, I"^at");
lex->category = "noun";
lex->lex_package = pack;
ADD_TO_LINKED_LIST(lex, index_lexicon_entry, lexicon->unsorted);
}
}
@<Create lower-case forms of all lexicon entries dash@>;
@<Sort the lexicon into alphabetical order dash@>;
return lexicon;
}
@ 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 dash@> =
index_lexicon_entry *lex;
LOOP_OVER_LINKED_LIST(lex, index_lexicon_entry, lexicon->unsorted) {
Str::copy(lex->reduced_to_lower_case, lex->lemma);
LOOP_THROUGH_TEXT(pos, lex->reduced_to_lower_case)
Str::put(pos, Characters::tolower(Str::get(pos)));
}
@ The lexicon is sorted by insertion sort, which is not ideally fast, but
which is convenient when dealing with linked lists: there are unlikely to be
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 dash@> =
index_lexicon_entry *lex;
LOOP_OVER_LINKED_LIST(lex, index_lexicon_entry, lexicon->unsorted) {
index_lexicon_entry *lex2, *last_lex;
if (lexicon->first == NULL) {
lexicon->first = lex; lex->sorted_next = NULL; continue;
}
for (last_lex = NULL, lex2 = lexicon->first; lex2;
last_lex = lex2, lex2 = lex2->sorted_next)
if (Str::cmp(lex->reduced_to_lower_case, lex2->reduced_to_lower_case) < 0) {
if (last_lex == NULL) lexicon->first = lex;
else last_lex->sorted_next = lex;
lex->sorted_next = lex2; goto Inserted;
}
last_lex->sorted_next = lex; lex->sorted_next = NULL;
Inserted: ;
}

View file

@ -4,5 +4,5 @@ To write the Gazetteer element (Gz) in the index.
@ =
void GazetteerElement::render(OUTPUT_STREAM, localisation_dictionary *LD) {
IndexLexicon::listing(OUT, InterpretIndex::get_lexicon(), TRUE);
IndexLexicon::listing(OUT, InterpretIndex::get_lexicon(), TRUE, LD);
}

View file

@ -16,5 +16,5 @@ void LexiconElement::render(OUTPUT_STREAM, localisation_dictionary *LD) {
"with rules like 'Instead of taking an empty container, ...'.");
HTML_CLOSE("span");
HTML_CLOSE("p");
IndexLexicon::listing(OUT, InterpretIndex::get_lexicon(), FALSE);
IndexLexicon::listing(OUT, InterpretIndex::get_lexicon(), FALSE, LD);
}