mirror of
https://github.com/ganelson/inform.git
synced 2024-07-08 18:14:21 +03:00
655 lines
78 KiB
HTML
655 lines
78 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>13/rsfk</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<meta http-equiv="Content-Language" content="en-gb">
|
|
<link href="inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
</head>
|
|
<body>
|
|
|
|
<!--Weave of '13/ki' generated by 7-->
|
|
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">core</a></li><li><a href="index.html#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>
|
|
|
|
<ul class="toc"><li><a href="#SP1">§1. Indexing the kinds</a></li><li><a href="#SP2">§2. Kind table construction</a></li><li><a href="#SP6">§6. Indexing kind names</a></li></ul><hr class="tocbar">
|
|
|
|
<p class="inwebparagraph"><a id="SP1"></a><b>§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">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Kinds::Index::index_kinds</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>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">priority</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain"> == 1) {</span>
|
|
<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>
|
|
<<span class="cwebmacro">Add a dotty row to the chart of kinds</span> <span class="cwebmacronumber">1.4</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Add a titling row to the chart of kinds</span> <span class="cwebmacronumber">1.2</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Add a dotty row to the chart of kinds</span> <span class="cwebmacronumber">1.4</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Add the rubric below the chart of kinds</span> <span class="cwebmacronumber">1.6</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">priority</span><span class="plain"> = 1; </span><span class="identifier">priority</span><span class="plain"> <= </span><span class="identifier">LOWEST_INDEX_PRIORITY</span><span class="plain">; </span><span class="identifier">priority</span><span class="plain">++) {</span>
|
|
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER_BASE_KINDS</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) {</span>
|
|
<span class="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>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">priority</span><span class="plain"> == 8) || (</span><span class="identifier">Kinds::Behaviour::definite</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">))) {</span>
|
|
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain">) {</span>
|
|
<span class="reserved">case</span><span class="plain"> 1: </span><<span class="cwebmacro">Write table row for this kind</span> <span class="cwebmacronumber">1.5</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> 2:</span>
|
|
<<span class="cwebmacro">Write heading for the detailed index entry for this kind</span> <span class="cwebmacronumber">1.7</span>><span class="plain">;</span>
|
|
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 1, </span><span class="string">"tight"</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Index kinds of kinds matched by this kind</span> <span class="cwebmacronumber">1.9</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Index explanatory text supplied for a kind</span> <span class="cwebmacronumber">1.11</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Index literal patterns which can specify this kind</span> <span class="cwebmacronumber">1.8</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Index possible values of an enumerated kind</span> <span class="cwebmacronumber">1.10</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="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><<span class="cwebmacro">Recurse to index subkinds of object</span> <span class="cwebmacronumber">1.1</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">priority</span><span class="plain"> == 1) || (</span><span class="identifier">priority</span><span class="plain"> == 6) || (</span><span class="identifier">priority</span><span class="plain"> == 7)) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain"> == 1) {</span>
|
|
<<span class="cwebmacro">Add a dotty row to the chart of kinds</span> <span class="cwebmacronumber">1.4</span>><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">priority</span><span class="plain"> == 7) {</span>
|
|
<<span class="cwebmacro">Add a second titling row to the chart of kinds</span> <span class="cwebmacronumber">1.3</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Add a dotty row to the chart of kinds</span> <span class="cwebmacronumber">1.4</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"hr"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain"> == 1) {</span>
|
|
<<span class="cwebmacro">Add a dotty row to the chart of kinds</span> <span class="cwebmacronumber">1.4</span>><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>
|
|
<<span class="cwebmacro">Explain about covariance and contravariance</span> <span class="cwebmacronumber">1.12</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Kinds::Index::index_kinds is used in 5/ipw (<a href="5-ipw.html#SP1">§1</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_1"></a><b>§1.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Recurse to index subkinds of object</span> <span class="cwebmacronumber">1.1</span>> =
|
|
</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>
|
|
<span class="functiontext">Data::Objects::index</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">, 2, (</span><span class="identifier">pass</span><span class="plain"> == 1)?</span><span class="identifier">FALSE</span><span class="plain">:</span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1">§1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_2"></a><b>§1.2. </b>An atypical row:
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Add a titling row to the chart of kinds</span> <span class="cwebmacronumber">1.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML::first_html_column_nowrap</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0, </span><span class="string">"#e0e0e0"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>basic kinds</b>"</span><span class="plain">);</span>
|
|
<span class="functiontext">Kinds::Index::index_kind_col_head</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">Kinds::Index::index_kind_col_head</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">Kinds::Index::index_kind_col_head</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">Kinds::Index::index_kind_col_head</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>
|
|
<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="#SP1">§1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_3"></a><b>§1.3. </b>And another:
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Add a second titling row to the chart of kinds</span> <span class="cwebmacronumber">1.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML::first_html_column_nowrap</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0, </span><span class="string">"#e0e0e0"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>making new kinds from old</b>"</span><span class="plain">);</span>
|
|
<span class="functiontext">Kinds::Index::index_kind_col_head</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">Kinds::Index::index_kind_col_head</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">Kinds::Index::index_kind_col_head</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">Kinds::Index::index_kind_col_head</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="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="#SP1">§1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_4"></a><b>§1.4. </b>A dotty row:
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Add a dotty row to the chart of kinds</span> <span class="cwebmacronumber">1.4</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">, </span><span class="string">"bgcolor=\</span><span class="plain">"</span><span class="string">#888\</span><span class="plain">"</span><span class="string">"</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=\</span><span class="plain">"</span><span class="string">1\</span><span class="plain">"</span><span class="string"> colspan=\</span><span class="plain">"</span><span class="string">5\</span><span class="plain">"</span><span class="string"> cellpadding=\</span><span class="plain">"</span><span class="string">0\</span><span class="plain">"</span><span class="string">"</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="#SP1">§1</a> (five times).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_5"></a><b>§1.5. </b>And then a typical row:
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Write table row for this kind</span> <span class="cwebmacronumber">1.5</span>> =
|
|
</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>
|
|
<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">) == 0) &&</span>
|
|
<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">Kinds::Index::begin_chart_row</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="functiontext">Kinds::Index::index_kind_name_cell</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="reserved">if</span><span class="plain"> (</span><span class="identifier">priority</span><span class="plain"> == 8) { </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">Kinds::Index::end_chart_row</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>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1">§1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_6"></a><b>§1.6. </b>Note the named anchors here, which must match those linked from the titling
|
|
row.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Add the rubric below the chart of kinds</span> <span class="cwebmacronumber">1.6</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">, </span><span class="string">"style=\</span><span class="plain">"</span><span class="string">display:none\</span><span class="plain">"</span><span class="string"> id=\</span><span class="plain">"</span><span class="string">default\</span><span class="plain">"</span><span class="string">"</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=\</span><span class="plain">"</span><span class="string">5\</span><span class="plain">"</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"The <b>default value</b> 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>
|
|
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">, </span><span class="string">"style=\</span><span class="plain">"</span><span class="string">display:none\</span><span class="plain">"</span><span class="string"> id=\</span><span class="plain">"</span><span class="string">repeat\</span><span class="plain">"</span><span class="string">"</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=\</span><span class="plain">"</span><span class="string">5\</span><span class="plain">"</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"A tick for <b>repeat</b> 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>
|
|
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">, </span><span class="string">"style=\</span><span class="plain">"</span><span class="string">display:none\</span><span class="plain">"</span><span class="string"> id=\</span><span class="plain">"</span><span class="string">props\</span><span class="plain">"</span><span class="string">"</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=\</span><span class="plain">"</span><span class="string">5\</span><span class="plain">"</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"A tick for <b>props</b> 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>
|
|
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">, </span><span class="string">"style=\</span><span class="plain">"</span><span class="string">display:none\</span><span class="plain">"</span><span class="string"> id=\</span><span class="plain">"</span><span class="string">under\</span><span class="plain">"</span><span class="string">"</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=\</span><span class="plain">"</span><span class="string">5\</span><span class="plain">"</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"A tick for <b>under</b> means that it's possible "</span>
|
|
<span class="string">"to understand values of this kind. For instance, 'Understand \</span><span class="plain">"</span><span class="string">award "</span>
|
|
<span class="string">"[number]\</span><span class="plain">"</span><span class="string"> as awarding.' might be allowed, if awarding were an action "</span>
|
|
<span class="string">"applying to a number, but 'Understand \</span><span class="plain">"</span><span class="string">run [rule]\</span><span class="plain">"</span><span class="string"> as rule-running.' "</span>
|
|
<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="#SP1">§1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_7"></a><b>§1.7. </b>The detailed entry lower down the page begins with:
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Write heading for the detailed index entry for this kind</span> <span class="cwebmacronumber">1.7</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 1, </span><span class="string">"halftight"</span><span class="plain">);</span>
|
|
<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">)-></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">"<b>"</span><span class="plain">); </span><span class="functiontext">Kinds::Index::index_kind</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">"</b>"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" (<i>plural</i> "</span><span class="plain">); </span><span class="functiontext">Kinds::Index::index_kind</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>
|
|
<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> <span class="comment">blue help icon, if any</span>
|
|
<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>
|
|
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 1, </span><span class="string">"tight"</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">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>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">a</span><span class="plain"> == 2) &&</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">), 0) ==</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">), 1)))</span>
|
|
<span class="identifier">a</span><span class="plain"> = 1;</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<i>"</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"><</span><span class="identifier">a</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">i</span><span class="plain"> > 0) </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">) > 0)</span>
|
|
<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>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">a</span><span class="plain"> > 1) </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>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&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>"</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">"</i>"</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="#SP1">§1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_8"></a><b>§1.8. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Index literal patterns which can specify this kind</span> <span class="cwebmacronumber">1.8</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">LiteralPatterns::list_of_literal_forms</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)) {</span>
|
|
<span class="functiontext">LiteralPatterns::index_all</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">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="#SP1">§1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_9"></a><b>§1.9. </b>Which kinds of kinds we match:
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Index kinds of kinds matched by this kind</span> <span class="cwebmacronumber">1.9</span>> =
|
|
</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">"<i>Matches:</i> "</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">)) &&</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">)) &&</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">) &&</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">Kinds::Index::index_kind</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>
|
|
<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="#SP1">§1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_10"></a><b>§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">
|
|
<<span class="cwebmacrodefn">Index possible values of an enumerated kind</span> <span class="cwebmacronumber">1.10</span>> =
|
|
</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>
|
|
<span class="functiontext">Data::Objects::index_instances</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">, 1);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1">§1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_11"></a><b>§1.11. </b>Explanations:
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Index explanatory text supplied for a kind</span> <span class="cwebmacronumber">1.11</span>> =
|
|
</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>
|
|
<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">) > 0) {</span>
|
|
<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>
|
|
<span class="functiontext">World::Inferences::index</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="functiontext">Kinds::Knowledge::as_subject</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">), </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1">§1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_12"></a><b>§1.12. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Explain about covariance and contravariance</span> <span class="cwebmacronumber">1.12</span>> =
|
|
</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>
|
|
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"span"</span><span class="plain">, </span><span class="string">"class=\</span><span class="plain">"</span><span class="string">smaller\</span><span class="plain">"</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>Covariance</b> 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. <b>Contravariance</b> 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="#SP1">§1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2"></a><b>§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</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>
|
|
<span class="identifier">HTML::next_html_column_nowrap</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<i>%s</i>&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>
|
|
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"a"</span><span class="plain">, </span><span class="string">"href=\</span><span class="plain">"</span><span class="string">#\</span><span class="plain">"</span><span class="string"> onClick=\</span><span class="plain">"</span><span class="string">showBasic('%s');\</span><span class="plain">"</span><span class="string">"</span><span class="plain">, </span><span class="identifier">anchor</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="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Kinds::Index::index_kind_col_head is used in <a href="#SP1_2">§1.2</a>, <a href="#SP1_3">§1.3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>Once we're past the heading row, each row is made in two parts: first this
|
|
is called —
|
|
</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</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">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>
|
|
<span class="identifier">striper</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="identifier">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">, 0, </span><span class="identifier">col</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Kinds::Index::begin_chart_row is used in <a href="#SP1_5">§1.5</a>, 5/ipw (<a href="5-ipw.html#SP3_1">§3.1</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP4"></a><b>§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 —
|
|
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</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>
|
|
<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">Kinds::Index::index_kind</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="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">"&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=\</span><span class="plain">"</span><span class="string">Kinds.html?segment2\</span><span class="plain">"</span><span class="string">"</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/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>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> = </span><span class="functiontext">Instances::count</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">i</span><span class="plain"> >= 1) </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>
|
|
<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">)-></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>
|
|
<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="endnote">The function Kinds::Index::index_kind_name_cell is used in <a href="#SP1_5">§1.5</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP5"></a><b>§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</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>
|
|
<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>
|
|
<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">, 0);</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">, 0, 4);</span>
|
|
<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="cwebmacro">Index the default value entry in the kind chart</span> <span class="cwebmacronumber">5.1</span>><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>
|
|
<span class="identifier">HTML::next_html_column_centred</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0);</span>
|
|
<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>
|
|
<span class="string">"border=0 alt=\</span><span class="plain">"</span><span class="string">%s\</span><span class="plain">"</span><span class="string"> src=inform:/doc_images/%s%s.png"</span><span class="plain">,</span>
|
|
<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>
|
|
<span class="identifier">HTML::next_html_column_centred</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0);</span>
|
|
<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>
|
|
<span class="string">"border=0 alt=\</span><span class="plain">"</span><span class="string">%s\</span><span class="plain">"</span><span class="string"> src=inform:/doc_images/%s%s.png"</span><span class="plain">,</span>
|
|
<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>
|
|
<span class="identifier">HTML::next_html_column_centred</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0);</span>
|
|
<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>
|
|
<span class="string">"border=0 alt=\</span><span class="plain">"</span><span class="string">%s\</span><span class="plain">"</span><span class="string"> src=inform:/doc_images/%s%s.png"</span><span class="plain">,</span>
|
|
<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="endnote">The function Kinds::Index::end_chart_row is used in <a href="#SP1_5">§1.5</a>, 5/ipw (<a href="5-ipw.html#SP3_2">§3.2</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP5_1"></a><b>§5.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Index the default value entry in the kind chart</span> <span class="cwebmacronumber">5.1</span>> =
|
|
</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>
|
|
<span class="functiontext">Instances::index_name</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">inst</span><span class="plain">);</span>
|
|
<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">"<0-in-literal-pattern>"</span><span class="plain">))</span>
|
|
<<span class="cwebmacro">Index the constant 0 but use the default literal pattern</span> <span class="cwebmacronumber">5.1.1</span>>
|
|
<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">"<first-constant>"</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="#SP5">§5</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP5_1_1"></a><b>§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">
|
|
<<span class="cwebmacrodefn">Index the constant 0 but use the default literal pattern</span> <span class="cwebmacronumber">5.1.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">LiteralPatterns::list_of_literal_forms</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">))</span>
|
|
<span class="functiontext">LiteralPatterns::index_value</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">,</span>
|
|
<span class="functiontext">LiteralPatterns::list_of_literal_forms</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">), 0);</span>
|
|
<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="#SP5_1">§5.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6"></a><b>§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</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>
|
|
<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>
|
|
<<span class="cwebmacro">Index the constructor text</span> <span class="cwebmacronumber">6.1</span>><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="endnote">The function Kinds::Index::index_kind is used in <a href="#SP1_7">§1.7</a>, <a href="#SP1_9">§1.9</a>, <a href="#SP4">§4</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6_1"></a><b>§6.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Index the constructor text</span> <span class="cwebmacronumber">6.1</span>> =
|
|
</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"><</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>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">from</span><span class="plain"> = 0, </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"> >= 0) </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>
|
|
<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"><=</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"><</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">></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="#SP6">§6</a>.</p>
|
|
|
|
<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">
|
|
<!--End of weave-->
|
|
</body>
|
|
</html>
|
|
|