1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-05 00:24:22 +03:00
inform7/docs/core-module/13-ki.html

685 lines
82 KiB
HTML
Raw Normal View History

2019-03-17 14:40:57 +02:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
2020-04-14 19:56:54 +03:00
<title>Kinds Index</title>
2020-03-19 02:11:25 +02:00
<meta name="viewport" content="width=device-width initial-scale=1">
2019-03-17 14:40:57 +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-04-14 19:56:54 +03:00
2019-03-17 14:40:57 +02:00
</head>
<body>
2020-03-19 02:11:25 +02:00
<nav role="navigation">
2020-04-14 19:56:54 +03:00
<h1><a href="../index.html">
<img src="../docs-src/Figures/Inform.png" height=72">
</a></h1>
<ul><li><a href="../compiler.html">compiler tools</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>
2020-04-14 19:56:54 +03:00
</ul><h2>Compiler Webs</h2><ul>
2020-03-19 02:11:25 +02:00
<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>
2020-04-14 19:56:54 +03:00
</ul><h2>Inbuild Modules</h2><ul>
<li><a href="../supervisor-module/index.html">supervisor</a></li>
</ul><h2>Inform7 Modules</h2><ul>
<li><a href="index.html"><span class="selectedlink">core</span></a></li>
2020-03-19 02:11:25 +02:00
<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>
2020-04-14 19:56:54 +03:00
<li><a href="../problems-module/index.html">problems</a></li>
2020-03-19 02:11:25 +02:00
<li><a href="../index-module/index.html">index</a></li>
2020-04-14 19:56:54 +03:00
</ul><h2>Inter Modules</h2><ul>
<li><a href="../bytecode-module/index.html">bytecode</a></li>
2020-03-19 02:11:25 +02:00
<li><a href="../building-module/index.html">building</a></li>
<li><a href="../codegen-module/index.html">codegen</a></li>
2020-04-14 19:56:54 +03:00
</ul><h2>Shared Modules</h2><ul>
<li><a href="../arch-module/index.html">arch</a></li>
<li><a href="../syntax-module/index.html">syntax</a></li>
<li><a href="../words-module/index.html">words</a></li>
<li><a href="../html-module/index.html">html</a></li>
2020-03-19 02:11:25 +02:00
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
2020-04-14 19:56:54 +03:00
</ul>
2020-03-19 02:11:25 +02:00
</nav>
<main role="main">
2020-04-14 19:56:54 +03:00
<!--Weave of 'Kinds Index' generated by 7-->
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7 Modules</a></li><li><a href="index.html">core</a></li><li><a href="index.html#13">Chapter 13: Bridge to Kinds Module</a></li><li><b>Kinds Index</b></li></ul><p class="purpose">To produce most of the Kinds page in the Index for a project: the chart at the top, and the detailed entries below.</p>
2019-03-17 14:40:57 +02:00
<ul class="toc"><li><a href="13-ki.html#SP1">&#167;1. Indexing the kinds</a></li><li><a href="13-ki.html#SP2">&#167;2. Kind table construction</a></li><li><a href="13-ki.html#SP6">&#167;6. Indexing kind names</a></li></ul><hr class="tocbar">
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Indexing the kinds. </b>The Kinds page of the index opens with a table summarising the hierarchy of
kinds, and then follows with details. This routine is called twice, once
with <code class="display"><span class="extract">pass</span></code> equal to 1, when it has to fill in the hierarchy of kinds listed
under "value" in the key chart at the top of the Kinds index; and then
again lower down, with <code class="display"><span class="extract">pass</span></code> equal to 2, when it gives more detail.
</p>
<p class="inwebparagraph">Not all of the built-in kinds are indexed on the Kinds page. The ones
omitted are of no help to end users, and would only clutter up the table
with misleading entries. Remaining kinds are grouped together in
"priority" order, a device to enable the quasinumerical kinds to stick
together, the enumerative ones, and so on. A lower priority number puts you
higher up, but kinds with priority 0 do not appear in the index at all.
</p>
<pre class="display">
2020-04-14 19:56:54 +03:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Kinds::Index::index_kinds<button class="popup" onclick="togglePopup('usagePopup901')">...<span class="popuptext" id="usagePopup901">Usage of <b>Kinds::Index::index_kinds</b>:<br>Index Physical World - <a href="5-ipw.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">pass</span><span class="plain">) {</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">priority</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">pass</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) {</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
<span class="identifier">tabulating_kinds_index</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">HTML::begin_wide_html_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Add a dotty row to the chart of kinds</span> <span class="cwebmacronumber">1.4</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Add a titling row to the chart of kinds</span> <span class="cwebmacronumber">1.2</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Add a dotty row to the chart of kinds</span> <span class="cwebmacronumber">1.4</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Add the rubric below the chart of kinds</span> <span class="cwebmacronumber">1.6</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">priority</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">; </span><span class="identifier">priority</span><span class="plain"> &lt;= </span><span class="identifier">LOWEST_INDEX_PRIORITY</span><span class="plain">; </span><span class="identifier">priority</span><span class="plain">++) {</span>
2019-03-17 14:40:57 +02:00
<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="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Compare::lt</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">K_object</span><span class="plain">)) </span><span class="reserved">continue</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">priority</span><span class="plain"> == </span><span class="identifier">Kinds::Behaviour::get_index_priority</span><span class="plain">(</span><span class="identifier">K</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">priority</span><span class="plain"> == </span><span class="constant">8</span><span class="plain">) || (</span><span class="identifier">Kinds::Behaviour::definite</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">))) {</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain">) {</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">case</span><span class="plain"> </span><span class="constant">1</span><span class="plain">: </span>&lt;<span class="cwebmacro">Write table row for this kind</span> <span class="cwebmacronumber">1.5</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">2</span><span class="plain">:</span>
2019-03-17 14:40:57 +02:00
&lt;<span class="cwebmacro">Write heading for the detailed index entry for this kind</span> <span class="cwebmacronumber">1.7</span>&gt;<span class="plain">;</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="string">"tight"</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
&lt;<span class="cwebmacro">Index kinds of kinds matched by this kind</span> <span class="cwebmacronumber">1.9</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Index explanatory text supplied for a kind</span> <span class="cwebmacronumber">1.11</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Index literal patterns which can specify this kind</span> <span class="cwebmacronumber">1.8</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Index possible values of an enumerated kind</span> <span class="cwebmacronumber">1.10</span>&gt;<span class="plain">;</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Compare::eq</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">K_object</span><span class="plain">)) </span>&lt;<span class="cwebmacro">Recurse to index subkinds of object</span> <span class="cwebmacronumber">1.1</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</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">priority</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) || (</span><span class="identifier">priority</span><span class="plain"> == </span><span class="constant">6</span><span class="plain">) || (</span><span class="identifier">priority</span><span class="plain"> == </span><span class="constant">7</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) {</span>
2019-03-17 14:40:57 +02:00
&lt;<span class="cwebmacro">Add a dotty row to the chart of kinds</span> <span class="cwebmacronumber">1.4</span>&gt;<span class="plain">;</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">priority</span><span class="plain"> == </span><span class="constant">7</span><span class="plain">) {</span>
2019-03-17 14:40:57 +02:00
&lt;<span class="cwebmacro">Add a second titling row to the chart of kinds</span> <span class="cwebmacronumber">1.3</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Add a dotty row to the chart of kinds</span> <span class="cwebmacronumber">1.4</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"hr"</span><span class="plain">);</span>
<span class="plain">}</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">pass</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) {</span>
2019-03-17 14:40:57 +02:00
&lt;<span class="cwebmacro">Add a dotty row to the chart of kinds</span> <span class="cwebmacronumber">1.4</span>&gt;<span class="plain">;</span>
<span class="identifier">HTML::end_html_table</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="identifier">tabulating_kinds_index</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
&lt;<span class="cwebmacro">Explain about covariance and contravariance</span> <span class="cwebmacronumber">1.12</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP1_1"></a><b>&#167;1.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Recurse to index subkinds of object</span> <span class="cwebmacronumber">1.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<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="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Compare::eq</span><span class="plain">(</span><span class="identifier">Kinds::Compare::super</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">), </span><span class="identifier">K_object</span><span class="plain">))</span>
2020-04-14 19:56:54 +03:00
<span class="functiontext"><a href="5-ipw.html#SP3">Data::Objects::index</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">, </span><span class="constant">2</span><span class="plain">, (</span><span class="identifier">pass</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">)?</span><span class="identifier">FALSE:TRUE</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="13-ki.html#SP1">&#167;1</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP1_2"></a><b>&#167;1.2. </b>An atypical row:
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Add a titling row to the chart of kinds</span> <span class="cwebmacronumber">1.2</span>&gt; =
</code></p>
<pre class="displaydefn">
2020-04-07 03:06:09 +03:00
<span class="identifier">HTML::first_html_column_nowrap</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="string">"#e0e0e0"</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;b&gt;basic kinds&lt;/b&gt;"</span><span class="plain">);</span>
<span class="functiontext"><a href="13-ki.html#SP2">Kinds::Index::index_kind_col_head</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"default value"</span><span class="plain">, </span><span class="string">"default"</span><span class="plain">);</span>
<span class="functiontext"><a href="13-ki.html#SP2">Kinds::Index::index_kind_col_head</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"repeat"</span><span class="plain">, </span><span class="string">"repeat"</span><span class="plain">);</span>
<span class="functiontext"><a href="13-ki.html#SP2">Kinds::Index::index_kind_col_head</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"props"</span><span class="plain">, </span><span class="string">"props"</span><span class="plain">);</span>
<span class="functiontext"><a href="13-ki.html#SP2">Kinds::Index::index_kind_col_head</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"under"</span><span class="plain">, </span><span class="string">"under"</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">HTML::end_html_row</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="13-ki.html#SP1">&#167;1</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP1_3"></a><b>&#167;1.3. </b>And another:
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Add a second titling row to the chart of kinds</span> <span class="cwebmacronumber">1.3</span>&gt; =
</code></p>
<pre class="displaydefn">
2020-04-07 03:06:09 +03:00
<span class="identifier">HTML::first_html_column_nowrap</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="string">"#e0e0e0"</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;b&gt;making new kinds from old&lt;/b&gt;"</span><span class="plain">);</span>
<span class="functiontext"><a href="13-ki.html#SP2">Kinds::Index::index_kind_col_head</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"default value"</span><span class="plain">, </span><span class="string">"default"</span><span class="plain">);</span>
<span class="functiontext"><a href="13-ki.html#SP2">Kinds::Index::index_kind_col_head</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">""</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="functiontext"><a href="13-ki.html#SP2">Kinds::Index::index_kind_col_head</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">""</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="functiontext"><a href="13-ki.html#SP2">Kinds::Index::index_kind_col_head</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">""</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">HTML::end_html_row</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="13-ki.html#SP1">&#167;1</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP1_4"></a><b>&#167;1.4. </b>A dotty row:
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Add a dotty row to the chart of kinds</span> <span class="cwebmacronumber">1.4</span>&gt; =
</code></p>
<pre class="displaydefn">
2020-04-07 03:06:09 +03:00
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">, </span><span class="string">"bgcolor=\"#888\""</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"height=\"1\" colspan=\"5\" cellpadding=\"0\""</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="13-ki.html#SP1">&#167;1</a> (five times).</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP1_5"></a><b>&#167;1.5. </b>And then a typical row:
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Write table row for this kind</span> <span class="cwebmacronumber">1.5</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">repeat</span><span class="plain"> = </span><span class="string">"cross"</span><span class="plain">, *</span><span class="identifier">props</span><span class="plain"> = </span><span class="string">"cross"</span><span class="plain">, *</span><span class="identifier">under</span><span class="plain"> = </span><span class="string">"cross"</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">shaded</span><span class="plain"> = </span><span class="identifier">FALSE</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">Kinds::Behaviour::get_highest_valid_value_as_integer</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) &amp;&amp;</span>
2019-03-17 14:40:57 +02:00
<span class="plain">(</span><span class="identifier">Kinds::Behaviour::indexed_grey_if_empty</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)))</span>
<span class="identifier">shaded</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Behaviour::compile_domain_possible</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)) </span><span class="identifier">repeat</span><span class="plain"> = </span><span class="string">"tick"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Behaviour::has_properties</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)) </span><span class="identifier">props</span><span class="plain"> = </span><span class="string">"tick"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Behaviour::offers_I6_GPR</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)) </span><span class="identifier">under</span><span class="plain"> = </span><span class="string">"tick"</span><span class="plain">;</span>
<span class="functiontext"><a href="13-ki.html#SP3">Kinds::Index::begin_chart_row</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="functiontext"><a href="13-ki.html#SP4">Kinds::Index::index_kind_name_cell</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">shaded</span><span class="plain">, </span><span class="identifier">K</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">priority</span><span class="plain"> == </span><span class="constant">8</span><span class="plain">) { </span><span class="identifier">repeat</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="identifier">props</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="identifier">under</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; }</span>
<span class="functiontext"><a href="13-ki.html#SP5">Kinds::Index::end_chart_row</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">shaded</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">repeat</span><span class="plain">, </span><span class="identifier">props</span><span class="plain">, </span><span class="identifier">under</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="13-ki.html#SP1">&#167;1</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP1_6"></a><b>&#167;1.6. </b>Note the named anchors here, which must match those linked from the titling
row.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Add the rubric below the chart of kinds</span> <span class="cwebmacronumber">1.6</span>&gt; =
</code></p>
<pre class="displaydefn">
2020-04-07 03:06:09 +03:00
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">, </span><span class="string">"style=\"display:none\" id=\"default\""</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"colspan=\"5\""</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"The &lt;b&gt;default value&lt;/b&gt; is used when we make something like "</span>
<span class="string">"a variable but don't tell Inform what its value is. For instance, if "</span>
<span class="string">"we write 'Zero hour is a time that varies', but don't tell Inform "</span>
<span class="string">"anything specific like 'Zero hour is 11:21 PM.', then Inform uses "</span>
<span class="string">"the value in the table above to decide what it will be. "</span>
<span class="string">"The same applies if we create a property (for instance, 'A person "</span>
<span class="string">"has a number called lucky number.'). Kinds of value not included "</span>
<span class="string">"in the table cannot be used in variables and properties."</span><span class="plain">);</span>
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"hr"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">, </span><span class="string">"style=\"display:none\" id=\"repeat\""</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"colspan=\"5\""</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"A tick for &lt;b&gt;repeat&lt;/b&gt; means that it's possible to "</span>
<span class="string">"repeat through values of this kind. For instance, 'repeat with T "</span>
<span class="string">"running through times:' is allowed, but 'repeat with N running "</span>
<span class="string">"through numbers:' is not - there are too many numbers for this to "</span>
<span class="string">"make sense. A tick here also means it's possible to form lists such "</span>
<span class="string">"as 'list of rulebooks', or to count the 'number of scenes'."</span><span class="plain">);</span>
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"hr"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">, </span><span class="string">"style=\"display:none\" id=\"props\""</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"colspan=\"5\""</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"A tick for &lt;b&gt;props&lt;/b&gt; means that values of this "</span>
<span class="string">"kind can have properties. For instance, 'A scene can be thrilling or "</span>
<span class="string">"dull.' makes an either/or property of a scene, but 'A number can be "</span>
<span class="string">"nice or nasty.' is not allowed because it would cost too much storage "</span>
<span class="string">"space. (Of course 'Definition:' can always be used to make adjectives "</span>
<span class="string">"applying to numbers; it's only properties which have storage "</span>
<span class="string">"worries.)"</span><span class="plain">);</span>
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"hr"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">, </span><span class="string">"style=\"display:none\" id=\"under\""</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"colspan=\"5\""</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"A tick for &lt;b&gt;under&lt;/b&gt; means that it's possible "</span>
2020-04-07 03:06:09 +03:00
<span class="string">"to understand values of this kind. For instance, 'Understand \"award "</span>
<span class="string">"[number]\" as awarding.' might be allowed, if awarding were an action "</span>
<span class="string">"applying to a number, but 'Understand \"run [rule]\" as rule-running.' "</span>
2019-03-17 14:40:57 +02:00
<span class="string">"is not allowed - there are so many rules with such long names that "</span>
<span class="string">"Inform doesn't add them to its vocabulary during play."</span><span class="plain">);</span>
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"hr"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="13-ki.html#SP1">&#167;1</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP1_7"></a><b>&#167;1.7. </b>The detailed entry lower down the page begins with:
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Write heading for the detailed index entry for this kind</span> <span class="cwebmacronumber">1.7</span>&gt; =
</code></p>
<pre class="displaydefn">
2020-04-07 03:06:09 +03:00
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="string">"halftight"</span><span class="plain">);</span>
2020-04-14 19:56:54 +03:00
<span class="identifier">Index::anchor_numbered</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)-&gt;</span><span class="identifier">allocation_id</span><span class="plain">); </span><span class="comment"> ...the anchor to which the grey icon in the table led</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;b&gt;"</span><span class="plain">); </span><span class="functiontext"><a href="13-ki.html#SP6">Kinds::Index::index_kind</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;/b&gt;"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" (&lt;i&gt;plural&lt;/i&gt; "</span><span class="plain">); </span><span class="functiontext"><a href="13-ki.html#SP6">Kinds::Index::index_kind</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Behaviour::get_documentation_reference</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">))</span>
2020-04-14 19:56:54 +03:00
<span class="identifier">Index::DocReferences::link</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Kinds::Behaviour::get_documentation_reference</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)); </span><span class="comment"> blue help icon, if any</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::is_proper_constructor</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)) {</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="string">"tight"</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">a</span><span class="plain"> = </span><span class="identifier">Kinds::Constructors::arity</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>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">a</span><span class="plain"> == </span><span class="constant">2</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">Kinds::Constructors::variance</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="constant">0</span><span class="plain">) ==</span>
<span class="identifier">Kinds::Constructors::variance</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="constant">1</span><span class="plain">)))</span>
<span class="identifier">a</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;i&gt;"</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">a</span><span class="plain">; </span><span class="identifier">i</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">i</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">", "</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Constructors::variance</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="identifier">i</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">)</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"covariant"</span><span class="plain">);</span>
<span class="reserved">else</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"contravariant"</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">a</span><span class="plain"> &gt; </span><span class="constant">1</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" in %c"</span><span class="plain">, </span><span class="character">'K'</span><span class="plain">+</span><span class="identifier">i</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="plain">}</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&amp;nbsp;"</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"a"</span><span class="plain">, </span><span class="string">"href=#contra&gt;"</span><span class="plain">);</span>
<span class="identifier">HTML_TAG_WITH</span><span class="plain">(</span><span class="string">"img"</span><span class="plain">, </span><span class="string">"border=0 src=inform:/doc_images/shelp.png"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"a"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;/i&gt;"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="13-ki.html#SP1">&#167;1</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP1_8"></a><b>&#167;1.8. </b><code class="display">
&lt;<span class="cwebmacrodefn">Index literal patterns which can specify this kind</span> <span class="cwebmacronumber">1.8</span>&gt; =
</code></p>
<pre class="displaydefn">
2020-04-14 19:56:54 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="5-lp.html#SP43">LiteralPatterns::list_of_literal_forms</a></span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)) {</span>
<span class="functiontext"><a href="5-lp.html#SP20">LiteralPatterns::index_all</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"br"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="13-ki.html#SP1">&#167;1</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP1_9"></a><b>&#167;1.9. </b>Which kinds of kinds we match:
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Index kinds of kinds matched by this kind</span> <span class="cwebmacronumber">1.9</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">f</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;i&gt;Matches:&lt;/i&gt; "</span><span class="plain">);</span>
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K2</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_BASE_KINDS</span><span class="plain">(</span><span class="identifier">K2</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Kinds::Behaviour::is_kind_of_kind</span><span class="plain">(</span><span class="identifier">K2</span><span class="plain">)) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">Kinds::Compare::le</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">K2</span><span class="plain">)) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">Kinds::Compare::eq</span><span class="plain">(</span><span class="identifier">K2</span><span class="plain">, </span><span class="identifier">K_word_value</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">Kinds::Compare::eq</span><span class="plain">(</span><span class="identifier">K2</span><span class="plain">, </span><span class="identifier">K_pointer_value</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">f</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">", "</span><span class="plain">);</span>
<span class="functiontext"><a href="13-ki.html#SP6">Kinds::Index::index_kind</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">K2</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">f</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"br"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="13-ki.html#SP1">&#167;1</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP1_10"></a><b>&#167;1.10. </b>Note that an enumerated kind only becomes so when its first possible value
is made, so that the following sentence can't have an empty list in it.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Index possible values of an enumerated kind</span> <span class="cwebmacronumber">1.10</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Behaviour::is_an_enumeration</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)) {</span>
2020-04-14 19:56:54 +03:00
<span class="functiontext"><a href="5-ipw.html#SP4">Data::Objects::index_instances</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">, </span><span class="constant">1</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="13-ki.html#SP1">&#167;1</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP1_11"></a><b>&#167;1.11. </b>Explanations:
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Index explanatory text supplied for a kind</span> <span class="cwebmacronumber">1.11</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">explanation</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::get_specification_text</span><span class="plain">(</span><span class="identifier">K</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::len</span><span class="plain">(</span><span class="identifier">explanation</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) {</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">explanation</span><span class="plain">);</span>
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"br"</span><span class="plain">);</span>
<span class="plain">}</span>
2020-04-14 19:56:54 +03:00
<span class="functiontext"><a href="16-in.html#SP15">World::Inferences::index</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="functiontext"><a href="13-kak.html#SP1">Kinds::Knowledge::as_subject</a></span><span class="plain">(</span><span class="identifier">K</span><span class="plain">), </span><span class="identifier">FALSE</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="13-ki.html#SP1">&#167;1</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP1_12"></a><b>&#167;1.12. </b><code class="display">
&lt;<span class="cwebmacrodefn">Explain about covariance and contravariance</span> <span class="cwebmacronumber">1.12</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
<span class="identifier">HTML_TAG_WITH</span><span class="plain">(</span><span class="string">"a"</span><span class="plain">, </span><span class="string">"name=contra"</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"span"</span><span class="plain">, </span><span class="string">"class=\"smaller\""</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;b&gt;Covariance&lt;/b&gt; means that if K is a kind of L, then something "</span>
<span class="string">"you make from K can be used as the same thing made from L. For example, "</span>
<span class="string">"a list of doors can be used as a list of things, because 'list of K' is "</span>
<span class="string">"covariant. &lt;b&gt;Contravariance&lt;/b&gt; means it works the other way round. "</span>
<span class="string">"For example, an activity on things can be used as an activity on doors, "</span>
<span class="string">"but not vice versa, because 'activity of K' is contravariant."</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"span"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="13-ki.html#SP1">&#167;1</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. Kind table construction. </b>First, here's the table cell for the heading at the top of a column: the
link is to the part of the rubric explaining what goes into the column.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Kinds::Index::index_kind_col_head<button class="popup" onclick="togglePopup('usagePopup902')">...<span class="popuptext" id="usagePopup902">Usage of <b>Kinds::Index::index_kind_col_head</b>:<br><a href="13-ki.html#SP1_2">&#167;1.2</a>, <a href="13-ki.html#SP1_3">&#167;1.3</a></span></button></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">name</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">anchor</span><span class="plain">) {</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">HTML::next_html_column_nowrap</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">0</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;i&gt;%s&lt;/i&gt;&amp;nbsp;"</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">anchor</span><span class="plain">) {</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"a"</span><span class="plain">, </span><span class="string">"href=\"#\" onClick=\"showBasic('%s');\""</span><span class="plain">, </span><span class="identifier">anchor</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">HTML_TAG_WITH</span><span class="plain">(</span><span class="string">"img"</span><span class="plain">, </span><span class="string">"border=0 src=inform:/doc_images/shelp.png"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"a"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>Once we're past the heading row, each row is made in two parts: first this
is called &mdash;
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">striper</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Kinds::Index::begin_chart_row<button class="popup" onclick="togglePopup('usagePopup903')">...<span class="popuptext" id="usagePopup903">Usage of <b>Kinds::Index::begin_chart_row</b>:<br><a href="13-ki.html#SP1_5">&#167;1.5</a>, Index Physical World - <a href="5-ipw.html#SP3_1">&#167;3.1</a></span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">) {</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">col</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">striper</span><span class="plain">) </span><span class="identifier">col</span><span class="plain"> = </span><span class="string">"#f0f0ff"</span><span class="plain">;</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">striper</span><span class="plain"> = </span><span class="identifier">striper</span><span class="plain">?</span><span class="identifier">FALSE:TRUE</span><span class="plain">;</span>
<span class="identifier">HTML::first_html_column_nowrap</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">col</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b>That leads us into the cell for the name of the kind. The following
routine is used for the kind rows, but not for the kinds-of-object
rows; the cell for those is filled in a different way in "Index
Physical World".
</p>
<p class="inwebparagraph">It's convenient to return the shadedness: a row is shaded if it's for
a kind which can have enumerated values but doesn't at the moment &mdash;
for instance, the sound effects row is shaded if there are none.
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Kinds::Index::index_kind_name_cell<button class="popup" onclick="togglePopup('usagePopup904')">...<span class="popuptext" id="usagePopup904">Usage of <b>Kinds::Index::index_kind_name_cell</b>:<br><a href="13-ki.html#SP1_5">&#167;1.5</a></span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">shaded</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">shaded</span><span class="plain">) </span><span class="identifier">HTML::begin_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"808080"</span><span class="plain">);</span>
<span class="functiontext"><a href="13-ki.html#SP6">Kinds::Index::index_kind</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Behaviour::is_quasinumerical</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&amp;nbsp;"</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"a"</span><span class="plain">, </span><span class="string">"href=\"Kinds.html?segment2\""</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">HTML_TAG_WITH</span><span class="plain">(</span><span class="string">"img"</span><span class="plain">, </span><span class="string">"border=0 src=inform:/doc_images/calc1.png"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"a"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Behaviour::get_documentation_reference</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">))</span>
<span class="identifier">Index::DocReferences::link</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Kinds::Behaviour::get_documentation_reference</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">));</span>
2020-04-14 19:56:54 +03:00
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> = </span><span class="functiontext"><a href="5-ins.html#SP22">Instances::count</a></span><span class="plain">(</span><span class="identifier">K</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">i</span><span class="plain"> &gt;= </span><span class="constant">1</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" [%d]"</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
2020-04-14 19:56:54 +03:00
<span class="identifier">Index::below_link_numbered</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)-&gt;</span><span class="identifier">allocation_id</span><span class="plain">); </span><span class="comment"> a grey see below icon leading to an anchor on pass 2</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">shaded</span><span class="plain">) </span><span class="identifier">HTML::end_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">shaded</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. </b>Finally we close the name cell, add the remaining cells, and close out the
whole row.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Kinds::Index::end_chart_row<button class="popup" onclick="togglePopup('usagePopup905')">...<span class="popuptext" id="usagePopup905">Usage of <b>Kinds::Index::end_chart_row</b>:<br><a href="13-ki.html#SP1_5">&#167;1.5</a>, Index Physical World - <a href="5-ipw.html#SP3_2">&#167;3.2</a></span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">shaded</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">,</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">tick1</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">tick2</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">tick3</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">tick1</span><span class="plain">) </span><span class="identifier">HTML::next_html_column</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">0</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">HTML::next_html_column_spanning</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">4</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">shaded</span><span class="plain">) </span><span class="identifier">HTML::begin_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"808080"</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Index the default value entry in the kind chart</span> <span class="cwebmacronumber">5.1</span>&gt;<span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">shaded</span><span class="plain">) </span><span class="identifier">HTML::end_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">tick1</span><span class="plain">) {</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">HTML::next_html_column_centred</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">0</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">tick1</span><span class="plain">)</span>
<span class="identifier">HTML_TAG_WITH</span><span class="plain">(</span><span class="string">"img"</span><span class="plain">,</span>
2020-04-07 03:06:09 +03:00
<span class="string">"border=0 alt=\"%s\" src=inform:/doc_images/%s%s.png"</span><span class="plain">,</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">tick1</span><span class="plain">, </span><span class="identifier">shaded</span><span class="plain">?</span><span class="string">"grey"</span><span class="plain">:</span><span class="string">""</span><span class="plain">, </span><span class="identifier">tick1</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">HTML::next_html_column_centred</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">0</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">tick2</span><span class="plain">)</span>
<span class="identifier">HTML_TAG_WITH</span><span class="plain">(</span><span class="string">"img"</span><span class="plain">,</span>
2020-04-07 03:06:09 +03:00
<span class="string">"border=0 alt=\"%s\" src=inform:/doc_images/%s%s.png"</span><span class="plain">,</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">tick2</span><span class="plain">, </span><span class="identifier">shaded</span><span class="plain">?</span><span class="string">"grey"</span><span class="plain">:</span><span class="string">""</span><span class="plain">, </span><span class="identifier">tick2</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">HTML::next_html_column_centred</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">0</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">tick3</span><span class="plain">)</span>
<span class="identifier">HTML_TAG_WITH</span><span class="plain">(</span><span class="string">"img"</span><span class="plain">,</span>
2020-04-07 03:06:09 +03:00
<span class="string">"border=0 alt=\"%s\" src=inform:/doc_images/%s%s.png"</span><span class="plain">,</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">tick3</span><span class="plain">, </span><span class="identifier">shaded</span><span class="plain">?</span><span class="string">"grey"</span><span class="plain">:</span><span class="string">""</span><span class="plain">, </span><span class="identifier">tick3</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">HTML::end_html_row</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP5_1"></a><b>&#167;5.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Index the default value entry in the kind chart</span> <span class="cwebmacronumber">5.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">found</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">instance</span><span class="plain"> *</span><span class="identifier">inst</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_INSTANCES</span><span class="plain">(</span><span class="identifier">inst</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">) {</span>
2020-04-14 19:56:54 +03:00
<span class="functiontext"><a href="5-ins.html#SP25">Instances::index_name</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">inst</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">found</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">found</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::get_index_default_value</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">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"&lt;0-in-literal-pattern&gt;"</span><span class="plain">))</span>
&lt;<span class="cwebmacro">Index the constant 0 but use the default literal pattern</span> <span class="cwebmacronumber">5.1.1</span>&gt;
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"&lt;first-constant&gt;"</span><span class="plain">))</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"--"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">p</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="13-ki.html#SP5">&#167;5</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP5_1_1"></a><b>&#167;5.1.1. </b>For every quasinumeric kind the default value is 0, but we don't want to
index just "0" because that means 0-as-a-number: we want it to come out
as "0 kg", "0 hectares", or whatever is appropriate.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Index the constant 0 but use the default literal pattern</span> <span class="cwebmacronumber">5.1.1</span>&gt; =
</code></p>
<pre class="displaydefn">
2020-04-14 19:56:54 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="5-lp.html#SP43">LiteralPatterns::list_of_literal_forms</a></span><span class="plain">(</span><span class="identifier">K</span><span class="plain">))</span>
<span class="functiontext"><a href="5-lp.html#SP23">LiteralPatterns::index_value</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="functiontext"><a href="5-lp.html#SP43">LiteralPatterns::list_of_literal_forms</a></span><span class="plain">(</span><span class="identifier">K</span><span class="plain">), </span><span class="constant">0</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">else</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"--"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="13-ki.html#SP5_1">&#167;5.1</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. Indexing kind names. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Kinds::Index::index_kind<button class="popup" onclick="togglePopup('usagePopup906')">...<span class="popuptext" id="usagePopup906">Usage of <b>Kinds::Index::index_kind</b>:<br><a href="13-ki.html#SP1_7">&#167;1.7</a>, <a href="13-ki.html#SP1_9">&#167;1.9</a>, <a href="13-ki.html#SP4">&#167;4</a></span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</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="reserved">int</span><span class="plain"> </span><span class="identifier">plural</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">with_links</span><span class="plain">) {</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</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">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::get_name</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">plural</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="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::is_proper_constructor</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)) {</span>
&lt;<span class="cwebmacro">Index the constructor text</span> <span class="cwebmacronumber">6.1</span>&gt;<span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</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">W</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">with_links</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">wn</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">if</span><span class="plain"> (</span><span class="identifier">Kinds::Behaviour::get_creating_sentence</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">))</span>
<span class="identifier">wn</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">Kinds::Behaviour::get_creating_sentence</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)));</span>
<span class="identifier">Index::link</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wn</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP6_1"></a><b>&#167;6.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Index the constructor text</span> <span class="cwebmacronumber">6.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">length</span><span class="plain"> = </span><span class="identifier">Wordings::length</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">), </span><span class="identifier">w1</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="identifier">tinted</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">first_stroke</span><span class="plain"> = -1, </span><span class="identifier">last_stroke</span><span class="plain"> = -1;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">length</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">Lexer::word</span><span class="plain">(</span><span class="identifier">w1</span><span class="plain">+</span><span class="identifier">i</span><span class="plain">) == </span><span class="identifier">STROKE_V</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">first_stroke</span><span class="plain"> == -1) </span><span class="identifier">first_stroke</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">;</span>
<span class="identifier">last_stroke</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">from</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">to</span><span class="plain"> = </span><span class="identifier">length</span><span class="plain">-1;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">last_stroke</span><span class="plain"> &gt;= </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">from</span><span class="plain"> = </span><span class="identifier">last_stroke</span><span class="plain">+1; </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">tinted</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">tinted</span><span class="plain">) </span><span class="identifier">HTML::begin_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"808080"</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">=</span><span class="identifier">from</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">&lt;=</span><span class="identifier">to</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">j</span><span class="plain">, </span><span class="identifier">untinted</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">j</span><span class="plain">=0; </span><span class="identifier">j</span><span class="plain">&lt;</span><span class="identifier">first_stroke</span><span class="plain">; </span><span class="identifier">j</span><span class="plain">++)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Lexer::word</span><span class="plain">(</span><span class="identifier">w1</span><span class="plain">+</span><span class="identifier">j</span><span class="plain">) == </span><span class="identifier">Lexer::word</span><span class="plain">(</span><span class="identifier">w1</span><span class="plain">+</span><span class="identifier">i</span><span class="plain">))</span>
<span class="identifier">untinted</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">untinted</span><span class="plain">) </span><span class="identifier">HTML::end_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">&gt;</span><span class="identifier">from</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Lexer::word</span><span class="plain">(</span><span class="identifier">w1</span><span class="plain">+</span><span class="identifier">i</span><span class="plain">) == </span><span class="identifier">CAPITAL_K_V</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"K"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Lexer::word</span><span class="plain">(</span><span class="identifier">w1</span><span class="plain">+</span><span class="identifier">i</span><span class="plain">) == </span><span class="identifier">CAPITAL_L_V</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"L"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%V"</span><span class="plain">, </span><span class="identifier">Lexer::word</span><span class="plain">(</span><span class="identifier">w1</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">untinted</span><span class="plain">) </span><span class="identifier">HTML::begin_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"808080"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">tinted</span><span class="plain">) </span><span class="identifier">HTML::end_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="13-ki.html#SP6">&#167;6</a>.</p>
2019-03-17 14:40:57 +02:00
<hr class="tocbar">
<ul class="toc"><li><a href="13-rsfk.html">Back to 'Runtime Support for Kinds'</a></li><li><i>(This section ends Chapter 13: Bridge to Kinds Module.)</i></li></ul><hr class="tocbar">
2019-04-22 17:42:10 +03:00
<!--End of weave-->
2020-04-14 19:56:54 +03:00
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
2020-03-19 02:11:25 +02:00
</main>
2019-03-17 14:40:57 +02:00
</body>
</html>