1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-16 22:14:23 +03:00
inform7/docs/inbuild-module/5-ls.html

283 lines
30 KiB
HTML
Raw Normal View History

2020-02-27 13:18:25 +02:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
2020-03-31 02:17:21 +03:00
<title>5/kts</title>
2020-03-19 02:11:25 +02:00
<meta name="viewport" content="width=device-width initial-scale=1">
2020-02-27 13:18:25 +02:00
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
2020-03-19 02:11:25 +02:00
<link href="../inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
2020-02-27 13:18:25 +02:00
</head>
<body>
2020-03-19 02:11:25 +02:00
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<ul>
<li><a href="../compiler.html"><b>compiler tools</b></a></li>
2020-03-19 02:11:25 +02:00
<li><a href="../other.html">other tools</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
<li><a href="../units.html">unit test tools</a></li>
</ul>
<h2>Compiler Webs</h2>
<ul>
<li><a href="../inbuild/index.html">inbuild</a></li>
<li><a href="../inform7/index.html">inform7</a></li>
<li><a href="../inter/index.html">inter</a></li>
</ul>
<h2>Inbuild Modules</h2>
<ul>
<li><a href="../inbuild-module/index.html">inbuild</a></li>
<li><a href="../arch-module/index.html">arch</a></li>
<li><a href="../words-module/index.html">words</a></li>
<li><a href="../syntax-module/index.html">syntax</a></li>
<li><a href="../html-module/index.html">html</a></li>
</ul>
<h2>Inform7 Modules</h2>
<ul>
<li><a href="../core-module/index.html">core</a></li>
<li><a href="../problems-module/index.html">problems</a></li>
<li><a href="../inflections-module/index.html">inflections</a></li>
<li><a href="../linguistics-module/index.html">linguistics</a></li>
<li><a href="../kinds-module/index.html">kinds</a></li>
<li><a href="../if-module/index.html">if</a></li>
<li><a href="../multimedia-module/index.html">multimedia</a></li>
<li><a href="../index-module/index.html">index</a></li>
</ul>
<h2>Inter Modules</h2>
<ul>
<li><a href="../inter-module/index.html">inter</a></li>
<li><a href="../building-module/index.html">building</a></li>
<li><a href="../codegen-module/index.html">codegen</a></li>
</ul>
<h2>Foundation</h2>
<ul>
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
</ul>
</nav>
<main role="main">
2020-02-27 13:18:25 +02:00
<!--Weave of '5/ls' generated by 7-->
2020-03-31 02:17:21 +03:00
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#5">Chapter 5: Genre Services</a></li><li><b>Language Services</b></li></ul><p class="purpose">Behaviour specific to copies of the language genre.</p>
2020-02-27 13:18:25 +02:00
2020-03-28 15:00:08 +02:00
<ul class="toc"><li><a href="#SP3">&#167;3. Logging</a></li><li><a href="#SP4">&#167;4. Language code</a></li><li><a href="#SP5">&#167;5. Kit</a></li><li><a href="#SP6">&#167;6. Finding by name</a></li><li><a href="#SP7">&#167;7. English</a></li></ul><hr class="tocbar">
2020-02-27 13:18:25 +02:00
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. </b>Inform can read and write text in multiple natural languages, though it
needs help to do so. Each natural language known to Inform comes from a
small resource folder called its "bundle", and also has an extension
associated with it: this includes English. Bundles for common languages
are included as part of the default distribution for Inform, but the
extension is only included for English.
</p>
<p class="inwebparagraph">Each natural language whose bundle can be located generates an instance
of the following structure.
</p>
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inform_language</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inbuild_copy</span><span class="plain"> *</span><span class="identifier">as_copy</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">semantic_version_number</span><span class="plain"> </span><span class="identifier">version</span><span class="plain">;</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">instance_name</span><span class="plain">; </span><span class="comment">instance name, e.g., "German language"</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">nl_instance</span><span class="plain">; </span><span class="comment">instance, e.g., "German language"</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">language_field</span><span class="plain">[</span><span class="constant">MAX_LANGUAGE_FIELDS</span><span class="plain">]; </span><span class="comment">contents of the <code class="display"><span class="extract">about.txt</span></code> fields</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">adaptive_person</span><span class="plain">; </span><span class="comment">which person (one of constants below) text subs are written from</span>
2020-02-27 13:18:25 +02:00
<span class="identifier">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">inform_language</span><span class="plain">;</span>
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="functiontext">Languages::new_il</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">inform_language</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">as_copy</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">version</span><span class="plain"> = </span><span class="identifier">VersionNumbers::null</span><span class="plain">();</span>
2020-02-27 13:18:25 +02:00
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">sentence_format</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">sentence_format</span><span class="plain">, </span><span class="string">"%S language"</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">instance_name</span><span class="plain"> = </span><span class="identifier">Feeds::feed_stream</span><span class="plain">(</span><span class="identifier">sentence_format</span><span class="plain">);</span>
2020-02-27 13:18:25 +02:00
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">sentence_format</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">nl_instance</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">adaptive_person</span><span class="plain"> = -1; </span><span class="comment">i.e., none yet specified</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">=0; </span><span class="identifier">n</span><span class="plain">&lt;</span><span class="constant">MAX_LANGUAGE_FIELDS</span><span class="plain">; </span><span class="identifier">n</span><span class="plain">++) </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">language_field</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">] = </span><span class="identifier">EMPTY_WORDING</span><span class="plain">;</span>
2020-02-27 13:18:25 +02:00
&lt;<span class="cwebmacro">Read the about.txt file for the bundle</span> <span class="cwebmacronumber">1.2</span>&gt;<span class="plain">;</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Found language bundle '%S' (%p)\n"</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
2020-02-27 13:18:25 +02:00
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">L</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">pathname</span><span class="plain"> *</span><span class="functiontext">Languages::path_to_bundle</span><span class="plain">(</span><span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="identifier">as_copy</span><span class="plain">-&gt;</span><span class="element">location_if_path</span><span class="plain">;</span>
2020-02-27 13:18:25 +02:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-03-30 15:25:23 +03:00
<p class="endnote">The function Languages::new_il is used in 4/lm (<a href="4-lm.html#SP3">&#167;3</a>).</p>
2020-02-27 13:18:25 +02:00
<p class="endnote">The function Languages::path_to_bundle appears nowhere else.</p>
2020-03-31 02:17:21 +03:00
<p class="endnote">The structure inform_language is accessed in 1/ic, 2/edt, 2/rqr, 2/nst, 3/bg, 3/ib, 3/is2, 3/is3, 4/em, 4/lm, 4/pm, 4/pbm, 4/pfm, 4/tm, 5/es, 5/kts, 5/ps, 5/ps2, 5/ts, 6/hdn, 6/inc, 6/vmg, 7/ed, 7/ed2, 7/ec and here.</p>
2020-02-27 13:18:25 +02:00
<p class="inwebparagraph"><a id="SP1_1"></a><b>&#167;1.1. </b>Within the bundle folder is a file called <code class="display"><span class="extract">about.txt</span></code>, which sets numbered
fields to excerpts of text. The following are the field numbers:
</p>
<pre class="definitions">
2020-04-07 03:06:09 +03:00
<span class="definitionkeyword">define</span> <span class="constant">NAME_IN_ENGLISH_LFIELD</span><span class="plain"> </span><span class="constant">1</span><span class="plain"> </span><span class="comment">e.g. "German"</span>
<span class="definitionkeyword">define</span> <span class="constant">NAME_NATIVE_LFIELD</span><span class="plain"> </span><span class="constant">2</span><span class="plain"> </span><span class="comment">e.g. "Deutsch"</span>
<span class="definitionkeyword">define</span> <span class="constant">CUE_NATIVE_LFIELD</span><span class="plain"> </span><span class="constant">3</span><span class="plain"> </span><span class="comment">e.g. "in deutscher Sprache"</span>
<span class="definitionkeyword">define</span> <span class="constant">ISO_639_CODE_LFIELD</span><span class="plain"> </span><span class="constant">4</span><span class="plain"> </span><span class="comment">e.g. "de": an ISO 639-1 code</span>
<span class="definitionkeyword">define</span> <span class="constant">TRANSLATOR_LFIELD</span><span class="plain"> </span><span class="constant">5</span><span class="plain"> </span><span class="comment">e.g. "Team GerX"</span>
<span class="definitionkeyword">define</span> <span class="constant">KIT_LFIELD</span><span class="plain"> </span><span class="constant">6</span><span class="plain"> </span><span class="comment">e.g. "GermanLanguageKit"</span>
<span class="definitionkeyword">define</span> <span class="constant">MAX_LANGUAGE_FIELDS</span><span class="plain"> </span><span class="constant">7</span><span class="plain"> </span><span class="comment">one more than the highest number above</span>
2020-02-27 13:18:25 +02:00
</pre>
<p class="inwebparagraph"><a id="SP1_2"></a><b>&#167;1.2. </b>If we can't find the file, it doesn't matter except that all of the excerpts
remain empty. But we may as well tell the debugging log.
</p>
<pre class="definitions">
2020-04-07 03:06:09 +03:00
<span class="definitionkeyword">define</span> <span class="constant">MAX_BUNDLE_ABOUT_LINE_LENGTH</span><span class="plain"> </span><span class="constant">256</span><span class="plain"> </span><span class="comment">which is far more than necessary, really</span>
2020-02-27 13:18:25 +02:00
</pre>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Read the about.txt file for the bundle</span> <span class="cwebmacronumber">1.2</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">about_file</span><span class="plain"> = </span><span class="identifier">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"about.txt"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">TextFiles::read</span><span class="plain">(</span><span class="identifier">about_file</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">,</span>
<span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="functiontext">Languages::about_helper</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Can't find about file: %f\n"</span><span class="plain">, </span><span class="identifier">about_file</span><span class="plain">);</span>
2020-02-27 13:18:25 +02:00
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP1">&#167;1</a>.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b>The format of the file is very simple. Each line is introduced by a number
from 1 to <code class="display"><span class="extract">MAX_LANGUAGE_FIELDS</span></code> minus one, and then contains text which
extends for the rest of the line.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Languages::about_helper</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">item_name</span><span class="plain">,</span>
<span class="identifier">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">vnl</span><span class="plain">) {</span>
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = (</span><span class="reserved">inform_language</span><span class="plain"> *) </span><span class="identifier">vnl</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">Feeds::feed_stream</span><span class="plain">(</span><span class="identifier">item_name</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::nonempty</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)) {</span>
<span class="identifier">vocabulary_entry</span><span class="plain"> *</span><span class="identifier">ve</span><span class="plain"> = </span><span class="identifier">Lexer::word</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">));</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">field</span><span class="plain"> = -1;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">ve</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Vocabulary::test_vflags</span><span class="plain">(</span><span class="identifier">ve</span><span class="plain">, </span><span class="identifier">NUMBER_MC</span><span class="plain">)))</span>
<span class="identifier">field</span><span class="plain"> = </span><span class="identifier">Vocabulary::get_literal_number_value</span><span class="plain">(</span><span class="identifier">ve</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">field</span><span class="plain"> &gt;= </span><span class="constant">1</span><span class="plain">) &amp;&amp; (</span><span class="identifier">field</span><span class="plain"> &lt; </span><span class="constant">MAX_LANGUAGE_FIELDS</span><span class="plain">)) {</span>
<span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">language_field</span><span class="plain">[</span><span class="identifier">field</span><span class="plain">] =</span>
2020-02-27 13:18:25 +02:00
<span class="identifier">Wordings::new</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)+1, </span><span class="identifier">Wordings::last_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">));</span>
2020-04-07 03:06:09 +03:00
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Warning: couldn't read about.txt line: %S\n"</span><span class="plain">, </span><span class="identifier">item_name</span><span class="plain">);</span>
2020-02-27 13:18:25 +02:00
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Languages::about_helper is used in <a href="#SP1_2">&#167;1.2</a>.</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. Logging. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Languages::log</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">opts</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">vL</span><span class="plain">) {</span>
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = (</span><span class="reserved">inform_language</span><span class="plain"> *) </span><span class="identifier">vL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</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">"&lt;null-language&gt;"</span><span class="plain">); }</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">else</span><span class="plain"> { </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">as_copy</span><span class="plain">-&gt;</span><span class="element">edition</span><span class="plain">-&gt;</span><span class="element">work</span><span class="plain">-&gt;</span><span class="element">title</span><span class="plain">); }</span>
2020-02-27 13:18:25 +02:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-03-11 02:21:09 +02:00
<p class="endnote">The function Languages::log is used in 1/im (<a href="1-im.html#SP3_3">&#167;3.3</a>).</p>
2020-02-27 13:18:25 +02:00
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. Language code. </b>This is used when we write the bibliographic data for the work of IF we're
making; this enables online databases like IFDB, and smart interpreters, to
detect the language of play for a story file without actually running it.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Languages::write_ISO_code</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">English_language</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">endif</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::nonempty</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">language_field</span><span class="plain">[</span><span class="constant">ISO_639_CODE_LFIELD</span><span class="plain">]))</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">language_field</span><span class="plain">[</span><span class="constant">ISO_639_CODE_LFIELD</span><span class="plain">]);</span>
2020-02-27 13:18:25 +02:00
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"en"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Languages::write_ISO_code appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. Kit. </b>Each language needs its own kit of Inter code, named as follows:
</p>
<pre class="display">
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">Languages::kit_name</span><span class="plain">(</span><span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::nonempty</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">language_field</span><span class="plain">[</span><span class="constant">KIT_LFIELD</span><span class="plain">]))</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">language_field</span><span class="plain">[</span><span class="constant">KIT_LFIELD</span><span class="plain">]);</span>
2020-02-27 13:18:25 +02:00
<span class="reserved">else</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="string">"%+WLanguageKit"</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="identifier">language_field</span><span class="plain">[</span><span class="constant">NAME_IN_ENGLISH_LFIELD</span><span class="plain">]);</span>
2020-02-27 13:18:25 +02:00
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">T</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-03-31 02:17:21 +03:00
<p class="endnote">The function Languages::kit_name is used in 5/ps2 (<a href="5-ps2.html#SP1">&#167;1</a>).</p>
2020-02-27 13:18:25 +02:00
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. Finding by name. </b>Given the name of a natural language (e.g., "German") we find the
corresponding structure, if it exists. We perform this check case
insensitively.
</p>
<pre class="display">
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="functiontext">Languages::from_name</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">inform_language</span><span class="plain">)</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_insensitive</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">as_copy</span><span class="plain">-&gt;</span><span class="element">edition</span><span class="plain">-&gt;</span><span class="element">work</span><span class="plain">-&gt;</span><span class="element">title</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">))</span>
2020-02-27 13:18:25 +02:00
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">L</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="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Languages::from_name appears nowhere else.</p>
2020-03-28 15:00:08 +02:00
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. English. </b>This finds the built-in definition of the English language.
</p>
<pre class="display">
<span class="reserved">inform_language</span><span class="plain"> *</span><span class="functiontext">Languages::internal_English</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">inbuild_requirement</span><span class="plain"> *</span><span class="identifier">req</span><span class="plain"> =</span>
<span class="functiontext">Requirements::any_version_of</span><span class="plain">(</span><span class="functiontext">Works::new</span><span class="plain">(</span><span class="identifier">language_genre</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"English"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">""</span><span class="plain">));</span>
2020-03-29 14:32:49 +03:00
<span class="reserved">inbuild_nest</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="functiontext">Inbuild::internal</span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="reserved">inbuild_nest</span><span class="plain">);</span>
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="reserved">inbuild_nest</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
2020-03-29 19:39:17 +03:00
<span class="reserved">inbuild_search_result</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="functiontext">Nests::search_for_best</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">R</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="functiontext">LanguageManager::from_copy</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">-&gt;</span><span class="element">copy</span><span class="plain">);</span>
2020-03-29 14:32:49 +03:00
<span class="plain">}</span>
2020-03-28 15:00:08 +02:00
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-03-31 02:17:21 +03:00
<p class="endnote">The function Languages::internal_English is used in 1/ic (<a href="1-ic.html#SP9_2">&#167;9.2</a>), 5/ps2 (<a href="5-ps2.html#SP1">&#167;1</a>).</p>
2020-03-28 15:00:08 +02:00
2020-02-27 13:18:25 +02:00
<hr class="tocbar">
2020-03-31 02:17:21 +03:00
<ul class="toc"><li><a href="5-kts.html">Back to 'Kits'</a></li><li><a href="5-ps.html">Continue with 'Pipeline Services'</a></li></ul><hr class="tocbar">
2020-02-27 13:18:25 +02:00
<!--End of weave-->
2020-03-19 02:11:25 +02:00
</main>
2020-02-27 13:18:25 +02:00
</body>
</html>