1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-08 10:04:21 +03:00
inform7/docs/indoc/3-ei.html
Graham Nelson 1268a0f40e Colonised
2020-04-14 17:56:54 +01:00

380 lines
49 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Examples Index</title>
<meta name="viewport" content="width=device-width initial-scale=1">
<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>
<nav role="navigation">
<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>
<li><a href="../other.html">other tools</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
<li><a href="../units.html">unit test tools</a></li>
</ul><h2>Other Tools</h2><ul>
<li><a href="../inblorb/index.html">inblorb</a></li>
<li><a href="index.html"><span class="selectedlink">indoc</span></a></li>
<li><a href="../inpolicy/index.html">inpolicy</a></li>
<li><a href="../inrtps/index.html">inrtps</a></li>
</ul><h2>Foundation</h2><ul>
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'Examples Index' generated by 7-->
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../other.html">Other Tools</a></li><li><a href="index.html">indoc</a></li><li><a href="index.html#3">Chapter 3: Indexing</a></li><li><b>Examples Index</b></li></ul><p class="purpose">To produces the contents and indexing pages, for HTML output and multiple-files mode only.</p>
<ul class="toc"><li><a href="#SP2">&#167;2. Alphabetising the examples</a></li><li><a href="#SP3">&#167;3. Alphabetic index of examples</a></li><li><a href="#SP5">&#167;5. Thematic index of examples</a></li><li><a href="#SP6">&#167;6. Numerical index of examples</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. </b>These structures are used to hold details needed for one or both of the
alphabetic and thematic example indexes.
</p>
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">example_index_data</span><span class="plain"> {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">alpha_index_embolden</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">alpha_index_rubric</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">alpha_index_subtitle</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">alpha_index_to_S</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">example</span><span class="plain"> *</span><span class="identifier">alpha_index_to_E</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">sort_key</span><span class="plain">;</span>
<span class="constant">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">example_index_data</span><span class="plain">;</span>
<span class="reserved">dictionary</span><span class="plain"> *</span><span class="identifier">example_index_data_by_rubric</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The structure example_index_data is private to this section.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. Alphabetising the examples. </b>This is not quite an A-Z list of example names, because some examples are
allowed to be indexed twice, once under a literal name (say "Cloves")
and once under its point (say "Adverbs used in commands"). In addition to
that, some example snippets embedded in the body text of the manuals can
also appear here. So we actually maintain an alphabetical index able to
index examples under arbitrary, multiple descriptions.
</p>
<p class="inwebparagraph">If this is called with the <code class="display"><span class="extract">RB_flag</span></code> set, then it adds the entry to the
thematic index instead, which shares code here because it also involves a
degree of alphabetisation.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ExamplesIndex::add_to_alphabetic_examples_index<button class="popup" onclick="togglePopup('usagePopup116')">...<span class="popuptext" id="usagePopup116">Usage of <b>ExamplesIndex::add_to_alphabetic_examples_index</b>:<br><a href="#SP3_1">&#167;3.1</a>, Renderer - <a href="2-rnd.html#SP11_2_2_2">&#167;11.2.2.2</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">given_rubric</span><span class="plain">,</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">index_to_S</span><span class="plain">, </span><span class="reserved">example</span><span class="plain"> *</span><span class="identifier">index_to_E</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">bold_flag</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">RB_flag</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">rubric</span><span class="plain">);</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">rubric</span><span class="plain">, </span><span class="identifier">given_rubric</span><span class="plain">);</span>
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext"><a href="4-pm.html#SP9">Regexp::create_mr</a></span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">rubric</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c*); *(%c*?)"</span><span class="plain">)) {</span>
<span class="functiontext"><a href="#SP2">ExamplesIndex::add_to_alphabetic_examples_index</a></span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0], </span><span class="identifier">index_to_S</span><span class="plain">, </span><span class="identifier">index_to_E</span><span class="plain">, </span><span class="identifier">bold_flag</span><span class="plain">, </span><span class="identifier">RB_flag</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP2">ExamplesIndex::add_to_alphabetic_examples_index</a></span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[1], </span><span class="identifier">index_to_S</span><span class="plain">, </span><span class="identifier">index_to_E</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">, </span><span class="identifier">RB_flag</span><span class="plain">);</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">RB_flag</span><span class="plain">) </span>&lt;<span class="cwebmacro">Translate the rubric according to the Recipe Book catalogue</span> <span class="cwebmacronumber">2.1</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Add a single new term to the examples index</span> <span class="cwebmacronumber">2.2</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="functiontext"><a href="4-pm.html#SP9">Regexp::dispose_of</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">rubric</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP2_1"></a><b>&#167;2.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Translate the rubric according to the Recipe Book catalogue</span> <span class="cwebmacronumber">2.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">trans</span><span class="plain"> = </span><span class="functiontext"><a href="2-dct.html#SP10">Dictionaries::get_text</a></span><span class="plain">(</span><span class="identifier">recipe_translates_as</span><span class="plain">, </span><span class="identifier">rubric</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">trans</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::eq</a></span><span class="plain">(</span><span class="identifier">trans</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"OMIT"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">rubric</span><span class="plain">, </span><span class="identifier">trans</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP2">&#167;2</a>.</p>
<p class="inwebparagraph"><a id="SP2_2"></a><b>&#167;2.2. </b><code class="display">
&lt;<span class="cwebmacrodefn">Add a single new term to the examples index</span> <span class="cwebmacronumber">2.2</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">sort_key</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">subtitle</span><span class="plain">);</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">sort_key</span><span class="plain">, </span><span class="identifier">rubric</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">rubric</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c*?) *-- *(%c*)"</span><span class="plain">)) </span><span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">rubric</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0]);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">rubric</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c*?): *(%c*?)"</span><span class="plain">)) {</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">rubric</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[1]);</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">subtitle</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0]);</span>
<span class="plain">}</span>
<span class="functiontext"><a href="3-iu.html#SP3">IndexUtilities::improve_alphabetisation</a></span><span class="plain">(</span><span class="identifier">sort_key</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">RB_flag</span><span class="plain">) {</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">pre</span><span class="plain"> = </span><span class="functiontext"><a href="2-dct.html#SP10">Dictionaries::get_text</a></span><span class="plain">(</span><span class="identifier">recipe_sort_prefix</span><span class="plain">, </span><span class="identifier">rubric</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">pre</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">, </span><span class="string">"%S&gt;%S"</span><span class="plain">, </span><span class="identifier">pre</span><span class="plain">, </span><span class="identifier">sort_key</span><span class="plain">);</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">sort_key</span><span class="plain">, </span><span class="identifier">p</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">example_index_data</span><span class="plain"> *</span><span class="identifier">eid</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">example_index_data</span><span class="plain">);</span>
<span class="identifier">eid</span><span class="plain">-&gt;</span><span class="element">alpha_index_embolden</span><span class="plain"> = </span><span class="identifier">bold_flag</span><span class="plain">;</span>
<span class="identifier">eid</span><span class="plain">-&gt;</span><span class="element">alpha_index_rubric</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">rubric</span><span class="plain">);</span>
<span class="identifier">eid</span><span class="plain">-&gt;</span><span class="element">alpha_index_subtitle</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">subtitle</span><span class="plain">);</span>
<span class="identifier">eid</span><span class="plain">-&gt;</span><span class="element">alpha_index_to_S</span><span class="plain"> = </span><span class="identifier">index_to_S</span><span class="plain">;</span>
<span class="identifier">eid</span><span class="plain">-&gt;</span><span class="element">alpha_index_to_E</span><span class="plain"> = </span><span class="identifier">index_to_E</span><span class="plain">;</span>
<span class="identifier">eid</span><span class="plain">-&gt;</span><span class="element">sort_key</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">sort_key</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">example_index_data_by_rubric</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="identifier">example_index_data_by_rubric</span><span class="plain"> = </span><span class="functiontext"><a href="2-dct.html#SP2">Dictionaries::new</a></span><span class="plain">(100, </span><span class="constant">FALSE</span><span class="plain">);</span>
<span class="functiontext"><a href="2-dct.html#SP5">Dictionaries::create</a></span><span class="plain">(</span><span class="identifier">example_index_data_by_rubric</span><span class="plain">, </span><span class="identifier">sort_key</span><span class="plain">);</span>
<span class="functiontext"><a href="2-dct.html#SP8">Dictionaries::write_value</a></span><span class="plain">(</span><span class="identifier">example_index_data_by_rubric</span><span class="plain">, </span><span class="identifier">sort_key</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) </span><span class="identifier">eid</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP2">&#167;2</a>.</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. Alphabetic index of examples. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ExamplesIndex::write_alphabetical_examples_index<button class="popup" onclick="togglePopup('usagePopup117')">...<span class="popuptext" id="usagePopup117">Usage of <b>ExamplesIndex::write_alphabetical_examples_index</b>:<br>Main - <a href="1-mn.html#SP1_5">&#167;1.5</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Stock the alphabetical index</span> <span class="cwebmacronumber">3.1</span>&gt;<span class="plain">;</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain"> = </span><span class="functiontext"><a href="3-iu.html#SP1">IndexUtilities::open_page</a></span><span class="plain">(</span>
<span class="identifier">I</span><span class="string">"Alphabetical Index of Examples"</span><span class="plain">, </span><span class="identifier">indoc_settings</span><span class="plain">-&gt;</span><span class="element">examples_alphabetical_leafname</span><span class="plain">);</span>
<span class="functiontext"><a href="3-iu.html#SP4">IndexUtilities::alphabet_row</a></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="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"table"</span><span class="plain">, </span><span class="string">"class=\"indextable\""</span><span class="plain">);</span>
<span class="reserved">example_index_data</span><span class="plain"> **</span><span class="identifier">eid_list</span><span class="plain"> =</span>
<span class="functiontext"><a href="2-mmr.html#SP25">Memory::I7_calloc</a></span><span class="plain">(</span><span class="identifier">NUMBER_CREATED</span><span class="plain">(</span><span class="reserved">example_index_data</span><span class="plain">), </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="reserved">example_index_data</span><span class="plain"> *), </span><span class="constant">CLS_SORTING_MREASON</span><span class="plain">);</span>
<span class="reserved">example_index_data</span><span class="plain"> *</span><span class="identifier">eid</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">eid</span><span class="plain">, </span><span class="reserved">example_index_data</span><span class="plain">) </span><span class="identifier">eid_list</span><span class="plain">[</span><span class="identifier">eid</span><span class="plain">-&gt;</span><span class="element">allocation_id</span><span class="plain">] = </span><span class="identifier">eid</span><span class="plain">;</span>
<span class="identifier">qsort</span><span class="plain">(</span><span class="identifier">eid_list</span><span class="plain">, (</span><span class="identifier">size_t</span><span class="plain">) </span><span class="identifier">NUMBER_CREATED</span><span class="plain">(</span><span class="reserved">example_index_data</span><span class="plain">), </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="reserved">example_index_data</span><span class="plain"> *),</span>
<span class="functiontext"><a href="#SP4">ExamplesIndex::sort_comparison</a></span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">current_subtitle</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">current_letter</span><span class="plain"> = -1;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">first_letter_block</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</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">NUMBER_CREATED</span><span class="plain">(</span><span class="reserved">example_index_data</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="reserved">example_index_data</span><span class="plain"> *</span><span class="identifier">eid</span><span class="plain"> = </span><span class="identifier">eid_list</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">initial</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_first_char</a></span><span class="plain">(</span><span class="identifier">eid</span><span class="plain">-&gt;</span><span class="element">sort_key</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-chr.html#SP1">Characters::isdigit</a></span><span class="plain">(</span><span class="identifier">initial</span><span class="plain">)) </span><span class="identifier">initial</span><span class="plain"> = </span><span class="character">'#'</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">initial</span><span class="plain"> != </span><span class="identifier">current_letter</span><span class="plain">) </span>&lt;<span class="cwebmacro">Start a new letter block</span> <span class="cwebmacronumber">3.3</span>&gt;<span class="plain">;</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">url</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Work out the URL of this example</span> <span class="cwebmacronumber">3.2</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Write an alphabetical-index entry</span> <span class="cwebmacronumber">3.5</span>&gt;<span class="plain">;</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">url</span><span class="plain">);</span>
<span class="plain">}</span>
&lt;<span class="cwebmacro">End a letter block</span> <span class="cwebmacronumber">3.4</span>&gt;<span class="plain">;</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"table"</span><span class="plain">);</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="functiontext"><a href="3-iu.html#SP4">IndexUtilities::alphabet_row</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">2</span><span class="plain">);</span>
<span class="functiontext"><a href="3-iu.html#SP2">IndexUtilities::close_page</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="functiontext"><a href="2-mmr.html#SP27">Memory::I7_free</a></span><span class="plain">(</span><span class="identifier">eid_list</span><span class="plain">, </span><span class="constant">CLS_SORTING_MREASON</span><span class="plain">,</span>
<span class="identifier">NUMBER_CREATED</span><span class="plain">(</span><span class="reserved">example_index_data</span><span class="plain">)*((</span><span class="reserved">int</span><span class="plain">) </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="reserved">example_index_data</span><span class="plain"> *)));</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP3_1"></a><b>&#167;3.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Stock the alphabetical index</span> <span class="cwebmacronumber">3.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">example</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">, </span><span class="reserved">example</span><span class="plain">)</span>
<span class="functiontext"><a href="#SP2">ExamplesIndex::add_to_alphabetic_examples_index</a></span><span class="plain">(</span><span class="identifier">E</span><span class="plain">-&gt;</span><span class="element">ex_rubric</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP3">&#167;3</a>.</p>
<p class="inwebparagraph"><a id="SP3_2"></a><b>&#167;3.2. </b><code class="display">
&lt;<span class="cwebmacrodefn">Work out the URL of this example</span> <span class="cwebmacronumber">3.2</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">eid</span><span class="plain">-&gt;</span><span class="element">alpha_index_to_S</span><span class="plain">)</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">url</span><span class="plain">, </span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">eid</span><span class="plain">-&gt;</span><span class="element">alpha_index_to_S</span><span class="plain">-&gt;</span><span class="element">section_URL</span><span class="plain">);</span>
<span class="reserved">else</span>
<span class="functiontext"><a href="2-exm.html#SP11">Examples::goto_example_url</a></span><span class="plain">(</span><span class="identifier">url</span><span class="plain">, </span><span class="identifier">eid</span><span class="plain">-&gt;</span><span class="element">alpha_index_to_E</span><span class="plain">, </span><span class="identifier">volumes</span><span class="plain">[0]);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP3">&#167;3</a>.</p>
<p class="inwebparagraph"><a id="SP3_3"></a><b>&#167;3.3. </b><code class="display">
&lt;<span class="cwebmacrodefn">Start a new letter block</span> <span class="cwebmacronumber">3.3</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">current_letter</span><span class="plain"> = </span><span class="identifier">initial</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">first_letter_block</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) { </span><span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"br"</span><span class="plain">); </span>&lt;<span class="cwebmacro">End a letter block</span> <span class="cwebmacronumber">3.4</span>&gt;<span class="plain">; }</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">uc_current_letter</span><span class="plain"> = </span><span class="functiontext"><a href="4-chr.html#SP1">Characters::toupper</a></span><span class="plain">(</span><span class="identifier">current_letter</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN</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">"td"</span><span class="plain">, </span><span class="string">"class=\"letterblock\""</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">inc</span><span class="plain">);</span>
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">inc</span><span class="plain">, </span><span class="identifier">uc_current_letter</span><span class="plain">);</span>
<span class="functiontext"><a href="5-htm.html#SP15">HTML::anchor</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">inc</span><span class="plain">);</span>
<span class="functiontext"><a href="3-iu.html#SP5">IndexUtilities::majuscule_heading</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">inc</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">);</span>
<span class="functiontext"><a href="3-iu.html#SP4">IndexUtilities::note_letter</a></span><span class="plain">(</span><span class="identifier">uc_current_letter</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">inc</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_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="identifier">first_letter_block</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP3">&#167;3</a>.</p>
<p class="inwebparagraph"><a id="SP3_4"></a><b>&#167;3.4. </b><code class="display">
&lt;<span class="cwebmacrodefn">End a letter block</span> <span class="cwebmacronumber">3.4</span>&gt; =
</code></p>
<pre class="displaydefn">
<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="#SP3">&#167;3</a>, <a href="#SP3_3">&#167;3.3</a>.</p>
<p class="inwebparagraph"><a id="SP3_5"></a><b>&#167;3.5. </b><code class="display">
&lt;<span class="cwebmacrodefn">Write an alphabetical-index entry</span> <span class="cwebmacronumber">3.5</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">, </span><span class="string">"class=\"indexentry\""</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">eid</span><span class="plain">-&gt;</span><span class="element">alpha_index_subtitle</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::ne</a></span><span class="plain">(</span><span class="identifier">eid</span><span class="plain">-&gt;</span><span class="element">alpha_index_subtitle</span><span class="plain">, </span><span class="identifier">current_subtitle</span><span class="plain">)) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;b&gt;%S&lt;/b&gt;&lt;br /&gt;"</span><span class="plain">, </span><span class="identifier">eid</span><span class="plain">-&gt;</span><span class="element">alpha_index_subtitle</span><span class="plain">);</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">current_subtitle</span><span class="plain">, </span><span class="identifier">eid</span><span class="plain">-&gt;</span><span class="identifier">alpha_index_subtitle</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&amp;#160;&amp;#160;&amp;#160;&amp;#160;"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">eid</span><span class="plain">-&gt;</span><span class="element">alpha_index_embolden</span><span class="plain"> == </span><span class="constant">TRUE</span><span class="plain">) { </span><span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"b"</span><span class="plain">); }</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">link_text</span><span class="plain">);</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">link_text</span><span class="plain">, </span><span class="identifier">eid</span><span class="plain">-&gt;</span><span class="element">alpha_index_rubric</span><span class="plain">);</span>
<span class="functiontext"><a href="2-rr.html#SP5">Rawtext::escape_HTML_characters_in</a></span><span class="plain">(</span><span class="identifier">link_text</span><span class="plain">);</span>
<span class="functiontext"><a href="2-haj.html#SP9">HTMLUtilities::general_link</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"standardlink"</span><span class="plain">, </span><span class="identifier">url</span><span class="plain">, </span><span class="identifier">link_text</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">link_text</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">eid</span><span class="plain">-&gt;</span><span class="element">alpha_index_embolden</span><span class="plain"> == </span><span class="constant">TRUE</span><span class="plain">) { </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"b"</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="#SP3">&#167;3</a>.</p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ExamplesIndex::sort_comparison<button class="popup" onclick="togglePopup('usagePopup118')">...<span class="popuptext" id="usagePopup118">Usage of <b>ExamplesIndex::sort_comparison</b>:<br><a href="#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">ent1</span><span class="plain">, </span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">ent2</span><span class="plain">) {</span>
<span class="reserved">const</span><span class="plain"> </span><span class="reserved">example_index_data</span><span class="plain"> *</span><span class="identifier">L1</span><span class="plain"> = *((</span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">example_index_data</span><span class="plain"> **) </span><span class="identifier">ent1</span><span class="plain">);</span>
<span class="reserved">const</span><span class="plain"> </span><span class="reserved">example_index_data</span><span class="plain"> *</span><span class="identifier">L2</span><span class="plain"> = *((</span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">example_index_data</span><span class="plain"> **) </span><span class="identifier">ent2</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext"><a href="4-sm.html#SP19">Str::cmp</a></span><span class="plain">(</span><span class="identifier">L1</span><span class="plain">-&gt;</span><span class="element">sort_key</span><span class="plain">, </span><span class="identifier">L2</span><span class="plain">-&gt;</span><span class="element">sort_key</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. Thematic index of examples. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ExamplesIndex::write_thematic_examples_index<button class="popup" onclick="togglePopup('usagePopup119')">...<span class="popuptext" id="usagePopup119">Usage of <b>ExamplesIndex::write_thematic_examples_index</b>:<br>Main - <a href="1-mn.html#SP1_5">&#167;1.5</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain"> = </span><span class="functiontext"><a href="3-iu.html#SP1">IndexUtilities::open_page</a></span><span class="plain">(</span>
<span class="identifier">I</span><span class="string">"Examples in Thematic Order"</span><span class="plain">, </span><span class="identifier">indoc_settings</span><span class="plain">-&gt;</span><span class="element">examples_thematic_leafname</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP7">ExamplesIndex::write_index_for_volume</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">volumes</span><span class="plain">[1]);</span>
<span class="functiontext"><a href="3-iu.html#SP2">IndexUtilities::close_page</a></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="SP6"></a><b>&#167;6. Numerical index of examples. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ExamplesIndex::write_numerical_examples_index<button class="popup" onclick="togglePopup('usagePopup120')">...<span class="popuptext" id="usagePopup120">Usage of <b>ExamplesIndex::write_numerical_examples_index</b>:<br>Main - <a href="1-mn.html#SP1_5">&#167;1.5</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain"> = </span><span class="functiontext"><a href="3-iu.html#SP1">IndexUtilities::open_page</a></span><span class="plain">(</span>
<span class="identifier">I</span><span class="string">"Examples in Numerical Order"</span><span class="plain">, </span><span class="identifier">indoc_settings</span><span class="plain">-&gt;</span><span class="element">examples_numerical_leafname</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP7">ExamplesIndex::write_index_for_volume</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">volumes</span><span class="plain">[0]);</span>
<span class="functiontext"><a href="3-iu.html#SP2">IndexUtilities::close_page</a></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="SP7"></a><b>&#167;7. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ExamplesIndex::write_index_for_volume<button class="popup" onclick="togglePopup('usagePopup121')">...<span class="popuptext" id="usagePopup121">Usage of <b>ExamplesIndex::write_index_for_volume</b>:<br><a href="#SP5">&#167;5</a>, <a href="#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">volume</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain">) {</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">owning_chapter</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">owning_section</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">; </span><span class="identifier">n</span><span class="plain"> &lt; </span><span class="identifier">no_examples</span><span class="plain">; </span><span class="identifier">n</span><span class="plain">++) {</span>
<span class="reserved">example</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain"> = </span><span class="identifier">V</span><span class="plain">-&gt;</span><span class="element">examples_sequence</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">];</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">E</span><span class="plain">-&gt;</span><span class="element">example_belongs_to_section</span><span class="plain">[</span><span class="identifier">V</span><span class="plain">-&gt;</span><span class="element">allocation_id</span><span class="plain">];</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain"> = </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">in_which_chapter</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">owning_chapter</span><span class="plain"> != </span><span class="identifier">C</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">owning_chapter</span><span class="plain"> != </span><span class="identifier">NULL</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">owning_chapter</span><span class="plain"> = </span><span class="identifier">C</span><span class="plain">;</span>
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;b&gt;Chapter %d: %S&lt;/b&gt;"</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">chapter_number</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">chapter_title</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>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">owning_section</span><span class="plain"> != </span><span class="identifier">S</span><span class="plain">) {</span>
<span class="identifier">owning_section</span><span class="plain"> = </span><span class="identifier">S</span><span class="plain">;</span>
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;i&gt;%c%S&lt;/i&gt;"</span><span class="plain">, </span><span class="constant">SECTION_SYMBOL</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">title</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>
<span class="functiontext"><a href="2-exm.html#SP8">Examples::render_example_cue</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<hr class="tocbar">
<ul class="toc"><li><a href="3-gi.html">Back to 'Contents and Indexes'</a></li><li><i>(This section ends Chapter 3: Indexing.)</i></li></ul><hr class="tocbar">
<!--End of weave-->
<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">
</main>
</body>
</html>