mirror of
https://github.com/ganelson/inform.git
synced 2024-07-08 18:14:21 +03:00
218 lines
29 KiB
HTML
218 lines
29 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>5/ut</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<meta http-equiv="Content-Language" content="en-gb">
|
|
<link href="inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
</head>
|
|
<body>
|
|
|
|
<!--Weave of '5/un' generated by 7-->
|
|
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">core</a></li><li><a href="index.html#5">Chapter 5: Nouns</a></li><li><b>Using Nametags</b></li></ul><p class="purpose">Nametags provide for a more contextual parsing of nouns, allowing them to be given in an inexact verbal form.</p>
|
|
|
|
<ul class="toc"><li><a href="#SP1">§1. Identifiers</a></li><li><a href="#SP3">§3. Translation</a></li></ul><hr class="tocbar">
|
|
|
|
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Identifiers. </b>Since I6 identifiers compiled by Inform are usually based on the names of
|
|
the things they represent — a typical example would be <code class="display"><span class="extract">I45_silver_bars</span></code> —
|
|
it's convenient to associate them with nametags.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">UseNouns::identifier</span><span class="plain">(</span><span class="identifier">noun</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"nothing"</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">-></span><span class="identifier">nt_I6_identifier</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="functiontext">UseNouns::iname</span><span class="plain">(</span><span class="identifier">noun</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-></span><span class="identifier">nt_iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) { </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"So %W / %S is stuck\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">Nouns::get_name</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">), </span><span class="identifier">t</span><span class="plain">-></span><span class="identifier">nt_I6_identifier</span><span class="plain">); </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"stuck"</span><span class="plain">); }</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">-></span><span class="identifier">nt_iname</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">UseNouns::iname_set</span><span class="plain">(</span><span class="identifier">noun</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-></span><span class="identifier">nt_iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseNouns::noun_compose_identifier</span><span class="plain">(</span><span class="identifier">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">noun</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-></span><span class="identifier">nt_iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Nouns::get_name</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="identifier">t</span><span class="plain">-></span><span class="identifier">nt_iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_iname_with_memo</span><span class="plain">(</span><span class="constant">INSTANCE_HL</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseNouns::noun_impose_identifier</span><span class="plain">(</span><span class="identifier">noun</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-></span><span class="identifier">nt_iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">t</span><span class="plain">-></span><span class="identifier">nt_iname</span><span class="plain"> = </span><span class="identifier">iname</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseNouns::noun_set_I6_representation</span><span class="plain">(</span><span class="identifier">noun</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">new</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-></span><span class="identifier">nt_iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no instance iname yet"</span><span class="plain">);</span>
|
|
<span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-></span><span class="identifier">nt_I6_identifier</span><span class="plain">);</span>
|
|
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-></span><span class="identifier">nt_I6_identifier</span><span class="plain">, </span><span class="identifier">new</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get_first_char</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-></span><span class="identifier">nt_I6_identifier</span><span class="plain">) == </span><span class="character">'"'</span><span class="plain">)</span>
|
|
<span class="identifier">Str::delete_first_character</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-></span><span class="identifier">nt_I6_identifier</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get_last_char</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-></span><span class="identifier">nt_I6_identifier</span><span class="plain">) == </span><span class="character">'"'</span><span class="plain">)</span>
|
|
<span class="identifier">Str::delete_last_character</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-></span><span class="identifier">nt_I6_identifier</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::change_translation</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-></span><span class="identifier">nt_iname</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">-></span><span class="identifier">nt_I6_identifier</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::clear_flag</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-></span><span class="identifier">nt_iname</span><span class="plain">, </span><span class="identifier">MAKE_NAME_UNIQUE</span><span class="plain">);</span>
|
|
<span class="functiontext">Hierarchy::make_available</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">t</span><span class="plain">-></span><span class="identifier">nt_iname</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function UseNouns::identifier is used in 5/ins (<a href="5-ins.html#SP14">§14</a>), 5/ipw (<a href="5-ipw.html#SP3_1">§3.1</a>, <a href="5-ipw.html#SP3_5">§3.5</a>).</p>
|
|
|
|
<p class="endnote">The function UseNouns::iname is used in 5/ins (<a href="5-ins.html#SP14">§14</a>), 13/rsfk (<a href="13-rsfk.html#SP23">§23</a>).</p>
|
|
|
|
<p class="endnote">The function UseNouns::iname_set is used in 13/rsfk (<a href="13-rsfk.html#SP23">§23</a>).</p>
|
|
|
|
<p class="endnote">The function UseNouns::noun_compose_identifier is used in 5/ins (<a href="5-ins.html#SP14">§14</a>).</p>
|
|
|
|
<p class="endnote">The function UseNouns::noun_impose_identifier is used in 13/rsfk (<a href="13-rsfk.html#SP23">§23</a>).</p>
|
|
|
|
<p class="endnote">The function UseNouns::noun_set_I6_representation is used in <a href="#SP2_1">§2.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>The identifiers are created all at once, but the process is complicated by
|
|
the fact that the source text is allowed to override our choices. For
|
|
instance, the Standard Rules want the player-character object to be called
|
|
<code class="display"><span class="extract">selfobj</span></code> in I6 source text, not something like <code class="display"><span class="extract">I32_yourself</span></code>.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseNouns::name_all</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER_BASE_KINDS</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)</span>
|
|
<span class="functiontext">Kinds::RunTime::assure_iname_exists</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="identifier">ParseTree::traverse</span><span class="plain">(</span><span class="functiontext">UseNouns::visit_to_name</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseNouns::visit_to_name</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">ParseTree::get_type</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">) == </span><span class="identifier">SENTENCE_NT</span><span class="plain">) && (</span><span class="identifier">p</span><span class="plain">-</span><span class="element">>down</span><span class="plain">) &&</span>
|
|
<span class="plain">(</span><span class="identifier">ParseTree::int_annotation</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">-</span><span class="element">>down</span><span class="plain">, </span><span class="constant">category_of_I6_translation_ANNOT</span><span class="plain">) == </span><span class="constant">NOUN_I6TR</span><span class="plain">))</span>
|
|
<<span class="cwebmacro">Act on a request to translate a noun in a specific way</span> <span class="cwebmacronumber">2.1</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function UseNouns::name_all is used in 1/mr (<a href="1-mr.html#SP4_11">§4.11</a>).</p>
|
|
|
|
<p class="endnote">The function UseNouns::visit_to_name appears nowhere else.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2_1"></a><b>§2.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Act on a request to translate a noun in a specific way</span> <span class="cwebmacronumber">2.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Wordings::trim_last_word</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">-</span><span class="element">>down</span><span class="plain">-</span><span class="element">>next</span><span class="plain">));</span>
|
|
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">res</span><span class="plain"> = </span><span class="identifier">ExParser::parse_excerpt</span><span class="plain">(</span><span class="identifier">NOUN_MC</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">res</span><span class="plain">) {</span>
|
|
<span class="identifier">noun</span><span class="plain"> *</span><span class="identifier">nt</span><span class="plain"> = </span><span class="identifier">Nouns::disambiguate</span><span class="plain">(</span><span class="identifier">res</span><span class="plain">, </span><span class="identifier">MAX_NOUN_PRIORITY</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nt</span><span class="plain">) {</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">i6r</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">i6r</span><span class="plain">, </span><span class="string">"%N"</span><span class="plain">, </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">-</span><span class="element">>down</span><span class="plain">-</span><span class="element">>next</span><span class="plain">-</span><span class="element">>next</span><span class="plain">)));</span>
|
|
<span class="functiontext">UseNouns::noun_set_I6_representation</span><span class="plain">(</span><span class="identifier">nt</span><span class="plain">, </span><span class="identifier">i6r</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">i6r</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_BadObjectTranslation</span><span class="plain">),</span>
|
|
<span class="string">"there is no such object or kind of object"</span><span class="plain">,</span>
|
|
<span class="string">"so its name will never be translated into an I6 Object or Class identifier "</span>
|
|
<span class="string">"in any event."</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3"></a><b>§3. Translation. </b></p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">TRANS_KIND</span><span class="plain"> 1</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">TRANS_INSTANCE</span><span class="plain"> 2</span>
|
|
</pre>
|
|
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>This is for translation of nouns into different natural languages,
|
|
and is a somewhat provisional feature for now.
|
|
</p>
|
|
|
|
<blockquote>
|
|
<p>Thing translates into French as chose (f).</p>
|
|
|
|
</blockquote>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="plain"><</span><span class="identifier">translates</span><span class="plain">-</span><span class="identifier">into</span><span class="plain">-</span><span class="identifier">nl</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">subject</span><span class="plain">> ::=</span>
|
|
<span class="plain"><</span><span class="identifier">k</span><span class="plain">-</span><span class="identifier">kind</span><span class="plain">> | ==> </span><span class="constant">TRANS_KIND</span><span class="plain">; *</span><span class="identifier">XP</span><span class="plain"> = </span><span class="identifier">RP</span><span class="plain">[1]</span>
|
|
<span class="plain"><</span><span class="reserved">instance</span><span class="plain">> ==> </span><span class="constant">TRANS_INSTANCE</span><span class="plain">; *</span><span class="identifier">XP</span><span class="plain"> = </span><span class="identifier">RP</span><span class="plain">[1]</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">UseNouns::nl_translates</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">pn</span><span class="plain">) {</span>
|
|
<span class="comment">the object</span>
|
|
<span class="reserved">natural_language</span><span class="plain"> *</span><span class="identifier">nl</span><span class="plain"> = </span><span class="identifier">ParseTree::get_defn_language</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">-</span><span class="element">>next</span><span class="plain">-</span><span class="element">>next</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">g</span><span class="plain"> = </span><span class="identifier">ParseTree::int_annotation</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">-</span><span class="element">>next</span><span class="plain">-</span><span class="element">>next</span><span class="plain">, </span><span class="identifier">gender_reference_ANNOT</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"No such NL"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nl</span><span class="plain"> == </span><span class="identifier">English_language</span><span class="plain">) {</span>
|
|
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_CantTranslateIntoEnglish</span><span class="plain">),</span>
|
|
<span class="string">"you can't translate into English"</span><span class="plain">,</span>
|
|
<span class="string">"only out of it."</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> ((<</span><span class="identifier">translates</span><span class="plain">-</span><span class="identifier">into</span><span class="plain">-</span><span class="identifier">nl</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">subject</span><span class="plain">>(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">-</span><span class="element">>next</span><span class="plain">))) == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_CantTranslateValue</span><span class="plain">),</span>
|
|
<span class="string">"this isn't something which can be translated"</span><span class="plain">,</span>
|
|
<span class="string">"that is, it isn't a kind."</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">switch</span><span class="plain"> (<<</span><span class="identifier">r</span><span class="plain">>>) {</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">TRANS_INSTANCE</span><span class="plain">: {</span>
|
|
<span class="reserved">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = <<</span><span class="identifier">rp</span><span class="plain">>>;</span>
|
|
<span class="identifier">noun</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain"> = </span><span class="functiontext">Instances::get_noun</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"stuck on instance name"</span><span class="plain">);</span>
|
|
<span class="identifier">Nouns::add_to_noun_and_reg</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">-</span><span class="element">>next</span><span class="plain">-</span><span class="element">>next</span><span class="plain">), </span><span class="identifier">nl</span><span class="plain">, </span><span class="identifier">g</span><span class="plain">,</span>
|
|
<span class="plain">1, </span><span class="identifier">REGISTER_SINGULAR_NTOPT</span><span class="plain">);</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">TRANS_KIND</span><span class="plain">: {</span>
|
|
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain"> = <<</span><span class="identifier">rp</span><span class="plain">>>;</span>
|
|
<span class="identifier">kind_constructor</span><span class="plain"> *</span><span class="identifier">KC</span><span class="plain"> = </span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">KC</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"stuck on kind name"</span><span class="plain">);</span>
|
|
<span class="identifier">noun</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain"> = </span><span class="identifier">Kinds::Constructors::get_noun</span><span class="plain">(</span><span class="identifier">KC</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"further stuck on kind name"</span><span class="plain">);</span>
|
|
<span class="identifier">Nouns::add_to_noun_and_reg</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">-</span><span class="element">>next</span><span class="plain">-</span><span class="element">>next</span><span class="plain">), </span><span class="identifier">nl</span><span class="plain">, </span><span class="identifier">g</span><span class="plain">,</span>
|
|
<span class="plain">1, </span><span class="identifier">REGISTER_SINGULAR_NTOPT</span><span class="plain"> + </span><span class="identifier">REGISTER_PLURAL_NTOPT</span><span class="plain">);</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">default</span><span class="plain">:</span>
|
|
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bad translation category"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function UseNouns::nl_translates is used in 7/ns (<a href="7-ns.html#SP18">§18</a>).</p>
|
|
|
|
<hr class="tocbar">
|
|
<ul class="toc"><li><a href="5-ut.html">Back to 'Unicode Translations'</a></li><li><a href="5-ins.html">Continue with 'Instances'</a></li></ul><hr class="tocbar">
|
|
<!--End of weave-->
|
|
</body>
|
|
</html>
|
|
|