<pclass="commentary firstcommentary"><aid="SP1"class="paragraph-anchor"></a><b>§1. Public API. </b>This is a large and complex module of code, but it really only does one thing,
and so it is simple to control. Other modules or tools should do this only by
calling the functions below.
</p>
<pclass="commentary">To produce one or more index products (see below), first open a session; then
set its localisation — essentially, choose what language it should be written
in; then call functions to make the actual products; and finally close the session.
Note that:
</p>
<ulclass="items"><li>(1) If you want to index the same tree of code to two different languages, you
will need to do this as two sessions. However, an Index website and an EPS map
which are in the same language can both be made in the same session, and this
<pclass="commentary firstcommentary"><aid="SP3"class="paragraph-anchor"></a><b>§3. </b>Now localising. You can either set an existing dictionary which you happen
to have to hand, or else ask to read definitions from a file. See <ahref="../html-module/2-lcl.html"class="internal">Localisation (in html)</a>
<spanclass="plain-syntax"></span><spanclass="named-paragraph-container code-font"><ahref="1-ia.html#SP3_5"class="named-paragraph-link"><spanclass="named-paragraph">Check this is an open session</span><spanclass="named-paragraph-number">3.5</span></a></span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="named-paragraph-container code-font"><ahref="1-ia.html#SP3_5"class="named-paragraph-link"><spanclass="named-paragraph">Check this is an open session</span><spanclass="named-paragraph-number">3.5</span></a></span><spanclass="plain-syntax">;</span>
<pclass="commentary firstcommentary"><aid="SP3_1"class="paragraph-anchor"></a><b>§3.1. </b>Now for the productive part. You can make an entire index mini-website with
the following function, which may generate several hundred HTML files. This is
what is used in the Inform GUI apps on every compilation.
<spanclass="plain-syntax"></span><spanclass="named-paragraph-container code-font"><ahref="1-ia.html#SP3_5"class="named-paragraph-link"><spanclass="named-paragraph">Check this is an open session</span><spanclass="named-paragraph-number">3.5</span></a></span><spanclass="plain-syntax">;</span>
<pclass="commentary firstcommentary"><aid="SP3_2"class="paragraph-anchor"></a><b>§3.2. </b>This is a one-off function for generating the content of an index element
(without its heading, or any HTML surround): it's used for unit-testing those
elements, but is never used by the Inform GUI app.
<spanclass="plain-syntax"></span><spanclass="named-paragraph-container code-font"><ahref="1-ia.html#SP3_5"class="named-paragraph-link"><spanclass="named-paragraph">Check this is an open session</span><spanclass="named-paragraph-number">3.5</span></a></span><spanclass="plain-syntax">;</span>
<pclass="commentary firstcommentary"><aid="SP3_3"class="paragraph-anchor"></a><b>§3.3. </b>This is used by the Inform GUI apps to "release along with an EPS file".
Essentially it makes a print-suitable version of the Map element of the index,
though there are also many bells and whistles for customising the appearance
<spanclass="plain-syntax"></span><spanclass="named-paragraph-container code-font"><ahref="1-ia.html#SP3_5"class="named-paragraph-link"><spanclass="named-paragraph">Check this is an open session</span><spanclass="named-paragraph-number">3.5</span></a></span><spanclass="plain-syntax">;</span>
<pclass="commentary firstcommentary"><aid="SP3_4"class="paragraph-anchor"></a><b>§3.4. </b>And lastly closing. The only thing this now does is to enable a new session
to be opened afterwards, in fact, but that might change in future.
<spanclass="plain-syntax"></span><spanclass="named-paragraph-container code-font"><ahref="1-ia.html#SP3_5"class="named-paragraph-link"><spanclass="named-paragraph">Check this is an open session</span><spanclass="named-paragraph-number">3.5</span></a></span><spanclass="plain-syntax">;</span>
<pclass="commentary firstcommentary"><aid="SP3_5"class="paragraph-anchor"></a><b>§3.5. </b><spanclass="named-paragraph-container code-font"><spanclass="named-paragraph-defn">Check this is an open session</span><spanclass="named-paragraph-number">3.5</span></span><spanclass="comment-syntax"> =</span>
<ulclass="endnotetexts"><li>This code is used in <ahref="1-ia.html#SP3">§3</a> (twice), <ahref="1-ia.html#SP3_1">§3.1</a>, <ahref="1-ia.html#SP3_2">§3.2</a>, <ahref="1-ia.html#SP3_3">§3.3</a>, <ahref="1-ia.html#SP3_4">§3.4</a>, <ahref="1-ia.html#SP6">§6</a> (three times), <ahref="1-ia.html#SP7">§7</a> (8 times), <ahref="1-ia.html#SP8">§8</a> (three times).</li></ul>
<pclass="commentary firstcommentary"><aid="SP4"class="paragraph-anchor"></a><b>§4. Sessions. </b>This is a miscellany, plain and simple, but it contains all of the workspace
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">struct</span><spanclass="plain-syntax"></span><spanclass="identifier-syntax">linked_list</span><spanclass="plain-syntax"> *</span><spanclass="identifier-syntax">list_of_scenes</span><spanclass="plain-syntax">; </span><spanclass="comment-syntax"> of </span><spanclass="extract"><spanclass="extract-syntax">simplified_scene</span></span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">struct</span><spanclass="plain-syntax"></span><spanclass="identifier-syntax">linked_list</span><spanclass="plain-syntax"> *</span><spanclass="identifier-syntax">list_of_EPS_map_levels</span><spanclass="plain-syntax">; </span><spanclass="comment-syntax"> of </span><spanclass="extract"><spanclass="extract-syntax">EPS_map_level</span></span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">struct</span><spanclass="plain-syntax"></span><spanclass="identifier-syntax">linked_list</span><spanclass="plain-syntax"> *</span><spanclass="identifier-syntax">list_of_submaps</span><spanclass="plain-syntax">; </span><spanclass="comment-syntax"> of </span><spanclass="extract"><spanclass="extract-syntax">connected_submap</span></span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">struct</span><spanclass="plain-syntax"></span><spanclass="identifier-syntax">linked_list</span><spanclass="plain-syntax"> *</span><spanclass="identifier-syntax">list_of_pages</span><spanclass="plain-syntax">; </span><spanclass="comment-syntax"> of </span><spanclass="extract"><spanclass="extract-syntax">index_page</span></span>
<spanclass="reserved-syntax">index_session</span><spanclass="plain-syntax"> *</span><spanclass="function-syntax">Indexing::new_session</span><buttonclass="popup"onclick="togglePopup('usagePopup1')"><spanclass="comment-syntax">?</span><spanclass="popuptext"id="usagePopup1">Usage of <spanclass="code-font"><spanclass="function-syntax">Indexing::new_session</span></span>:<br/><ahref="1-ia.html#SP2">§2</a></span></button><spanclass="plain-syntax">(</span><spanclass="identifier-syntax">inter_tree</span><spanclass="plain-syntax"> *</span><spanclass="identifier-syntax">I</span><spanclass="plain-syntax">) {</span>
<spanclass="plain-syntax"></span><spanclass="reserved-syntax">if</span><spanclass="plain-syntax"> (</span><spanclass="identifier-syntax">I</span><spanclass="plain-syntax"> == </span><spanclass="identifier-syntax">NULL</span><spanclass="plain-syntax">) </span><spanclass="identifier-syntax">internal_error</span><spanclass="plain-syntax">(</span><spanclass="string-syntax">"no tree to index"</span><spanclass="plain-syntax">);</span>
<pclass="commentary firstcommentary"><aid="SP6"class="paragraph-anchor"></a><b>§6. Private API. </b>The remaining functions in this section are for use only within the <ahref="index.html"class="internal">index</a>
<spanclass="identifier-syntax">inter_tree</span><spanclass="plain-syntax"> *</span><spanclass="function-syntax">Indexing::get_tree</span><buttonclass="popup"onclick="togglePopup('usagePopup2')"><spanclass="comment-syntax">?</span><spanclass="popuptext"id="usagePopup2">Usage of <spanclass="code-font"><spanclass="function-syntax">Indexing::get_tree</span></span>:<br/>Faux Instances - <ahref="2-fi.html#SP10">§10</a><br/>Faux Scenes - <ahref="2-fs.html#SP2">§2</a><br/>Behaviour Element - <ahref="3-be.html#SP1">§1</a><br/>Card Element - <ahref="3-ce.html#SP1">§1</a><br/>Commands Element - <ahref="3-ce3.html#SP1">§1</a><br/>Contents Element - <ahref="3-ce4.html#SP1">§1</a><br/>Extras Element - <ahref="3-ee2.html#SP1">§1</a><br/>Figures Element - <ahref="3-fe.html#SP1">§1</a><br/>Grouped Element - <ahref="3-ge2.html#SP2">§2</a><br/>Innards Element - <ahref="3-ie.html#SP1">§1</a><br/>Phrasebook Element - <ahref="3-pe.html#SP1">§1</a><br/>Plot Element - <ahref="3-pe2.html#SP1">§1</a><br/>Tokens Element - <ahref="3-te2.html#SP1">§1</a></span></button><spanclass="plain-syntax">(</span><spanclass="reserved-syntax">index_session</span><spanclass="plain-syntax"> *</span><spanclass="identifier-syntax">session</span><spanclass="plain-syntax">) {</span>
<spanclass="plain-syntax"></span><spanclass="named-paragraph-container code-font"><ahref="1-ia.html#SP3_5"class="named-paragraph-link"><spanclass="named-paragraph">Check this is an open session</span><spanclass="named-paragraph-number">3.5</span></a></span><spanclass="plain-syntax">;</span>
<spanclass="identifier-syntax">localisation_dictionary</span><spanclass="plain-syntax"> *</span><spanclass="function-syntax">Indexing::get_localisation</span><buttonclass="popup"onclick="togglePopup('usagePopup3')"><spanclass="comment-syntax">?</span><spanclass="popuptext"id="usagePopup3">Usage of <spanclass="code-font"><spanclass="function-syntax">Indexing::get_localisation</span></span>:<br/>Index Interpreter - <ahref="2-ii.html#SP1">§1</a>, <ahref="2-ii.html#SP2">§2</a><br/>Index Rules - <ahref="2-ir.html#SP8">§8</a>, <ahref="2-ir.html#SP11">§11</a>, <ahref="2-ir.html#SP12">§12</a>, <ahref="2-ir.html#SP15">§15</a><br/>The Periodic Table - <ahref="3-tpt.html#SP2">§2</a><br/>Alphabetic Element - <ahref="3-ae.html#SP1">§1</a><br/>Arithmetic Element - <ahref="3-ae2.html#SP1">§1</a><br/>Behaviour Element - <ahref="3-be.html#SP1">§1</a><br/>Chart Element - <ahref="3-ce2.html#SP1">§1</a>, <ahref="3-ce2.html#SP6">§6</a><br/>Commands Element - <ahref="3-ce3.html#SP1">§1</a><br/>Contents Element - <ahref="3-ce4.html#SP1">§1</a><br/>Events Element - <ahref="3-ee.html#SP1">§1</a><br/>Extras Element - <ahref="3-ee2.html#SP1">§1</a><br/>Figures Element - <ahref="3-fe.html#SP1">§1</a><br/>Gazetteer Element - <ahref="3-ge.html#SP1">§1</a><br/>Grouped Element - <ahref="3-ge2.html#SP2">§2</a><br/>Innards Element - <ahref="3-ie.html#SP1">§1</a><br/>Lexicon Element - <ahref="3-le.html#SP1">§1</a><br/>Map Element - <ahref="3-me.html#SP1">§1</a>, <ahref="3-me.html#SP2">§2</a>, <ahref="3-me.html#SP3">§3</a>, <ahref="3-me.html#SP4">§4</a>, <ahref="3-me.html#SP7">§7</a><br/>Plot Element - <ahref="3-pe2.html#SP1">§1</a><br/>Relations Element - <ahref="3-re.html#SP1">§1</a><br/>Rules for Scenes Element - <ahref="3-rfse.html#SP1">§1</a><br/>Standards Element - <ahref="3-se.html#SP1">§1</a><br/>Tables Element - <ahref="3-te.html#SP1">§1</a><br/>Tokens Element - <ahref="3-te2.html#SP1">§1</a><br/>Values Element - <ahref="3-ve.html#SP1">§1</a><br/>Verbs Element - <ahref="3-ve2.html#SP1">§1</a><br/>Render HTML Map - <ahref="4-rhm.html#SP7">§7</a>, <ahref="4-rhm.html#SP8">§8</a>, <ahref="4-rhm.html#SP11">§11</a><br/>Render EPS Map - <ahref="4-rem.html#SP1">§1</a></span></button><spanclass="plain-syntax">(</span><spanclass="reserved-syntax">index_session</span><spanclass="plain-syntax"> *</span><spanclass="identifier-syntax">session</span><spanclass="plain-syntax">) {</span>
<spanclass="plain-syntax"></span><spanclass="named-paragraph-container code-font"><ahref="1-ia.html#SP3_5"class="named-paragraph-link"><spanclass="named-paragraph">Check this is an open session</span><spanclass="named-paragraph-number">3.5</span></a></span><spanclass="plain-syntax">;</span>
<spanclass="identifier-syntax">tree_inventory</span><spanclass="plain-syntax"> *</span><spanclass="function-syntax">Indexing::get_inventory</span><buttonclass="popup"onclick="togglePopup('usagePopup4')"><spanclass="comment-syntax">?</span><spanclass="popuptext"id="usagePopup4">Usage of <spanclass="code-font"><spanclass="function-syntax">Indexing::get_inventory</span></span>:<br/>Faux Instances - <ahref="2-fi.html#SP8">§8</a><br/>Faux Scenes - <ahref="2-fs.html#SP2">§2</a><br/>Alphabetic Element - <ahref="3-ae.html#SP1">§1</a><br/>Arithmetic Element - <ahref="3-ae2.html#SP1">§1</a><br/>Behaviour Element - <ahref="3-be.html#SP1">§1</a><br/>Chart Element - <ahref="3-ce2.html#SP1">§1</a><br/>Contents Element - <ahref="3-ce4.html#SP1">§1</a><br/>Events Element - <ahref="3-ee.html#SP1">§1</a><br/>Extras Element - <ahref="3-ee2.html#SP1">§1</a><br/>Figures Element - <ahref="3-fe.html#SP1">§1</a><br/>Grouped Element - <ahref="3-ge2.html#SP1">§1</a>, <ahref="3-ge2.html#SP2">§2</a><br/>Innards Element - <ahref="3-ie.html#SP1">§1</a><br/>Plot Element - <ahref="3-pe2.html#SP1">§1</a><br/>Relations Element - <ahref="3-re.html#SP1">§1</a><br/>Rules for Scenes Element - <ahref="3-rfse.html#SP1">§1</a><br/>Standards Element - <ahref="3-se.html#SP1">§1</a><br/>Tables Element - <ahref="3-te.html#SP1">§1</a><br/>Values Element - <ahref="3-ve.html#SP1">§1</a></span></button><spanclass="plain-syntax">(</span><spanclass="reserved-syntax">index_session</span><spanclass="plain-syntax"> *</span><spanclass="identifier-syntax">session</span><spanclass="plain-syntax">) {</span>
<spanclass="plain-syntax"></span><spanclass="named-paragraph-container code-font"><ahref="1-ia.html#SP3_5"class="named-paragraph-link"><spanclass="named-paragraph">Check this is an open session</span><spanclass="named-paragraph-number">3.5</span></a></span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="named-paragraph-container code-font"><ahref="1-ia.html#SP3_5"class="named-paragraph-link"><spanclass="named-paragraph">Check this is an open session</span><spanclass="named-paragraph-number">3.5</span></a></span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="named-paragraph-container code-font"><ahref="1-ia.html#SP3_5"class="named-paragraph-link"><spanclass="named-paragraph">Check this is an open session</span><spanclass="named-paragraph-number">3.5</span></a></span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="named-paragraph-container code-font"><ahref="1-ia.html#SP3_5"class="named-paragraph-link"><spanclass="named-paragraph">Check this is an open session</span><spanclass="named-paragraph-number">3.5</span></a></span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="named-paragraph-container code-font"><ahref="1-ia.html#SP3_5"class="named-paragraph-link"><spanclass="named-paragraph">Check this is an open session</span><spanclass="named-paragraph-number">3.5</span></a></span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="named-paragraph-container code-font"><ahref="1-ia.html#SP3_5"class="named-paragraph-link"><spanclass="named-paragraph">Check this is an open session</span><spanclass="named-paragraph-number">3.5</span></a></span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="named-paragraph-container code-font"><ahref="1-ia.html#SP3_5"class="named-paragraph-link"><spanclass="named-paragraph">Check this is an open session</span><spanclass="named-paragraph-number">3.5</span></a></span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="named-paragraph-container code-font"><ahref="1-ia.html#SP3_5"class="named-paragraph-link"><spanclass="named-paragraph">Check this is an open session</span><spanclass="named-paragraph-number">3.5</span></a></span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="named-paragraph-container code-font"><ahref="1-ia.html#SP3_5"class="named-paragraph-link"><spanclass="named-paragraph">Check this is an open session</span><spanclass="named-paragraph-number">3.5</span></a></span><spanclass="plain-syntax">;</span>
<pclass="commentary firstcommentary"><aid="SP8"class="paragraph-anchor"></a><b>§8. </b>These more substantial resources are calculated all in one go, but only on demand:
<spanclass="reserved-syntax">inter_lexicon</span><spanclass="plain-syntax"> *</span><spanclass="function-syntax">Indexing::get_lexicon</span><buttonclass="popup"onclick="togglePopup('usagePopup14')"><spanclass="comment-syntax">?</span><spanclass="popuptext"id="usagePopup14">Usage of <spanclass="code-font"><spanclass="function-syntax">Indexing::get_lexicon</span></span>:<br/>Gazetteer Element - <ahref="3-ge.html#SP1">§1</a><br/>Lexicon Element - <ahref="3-le.html#SP1">§1</a><br/>Verbs Element - <ahref="3-ve2.html#SP1">§1</a></span></button><spanclass="plain-syntax">(</span><spanclass="reserved-syntax">index_session</span><spanclass="plain-syntax"> *</span><spanclass="identifier-syntax">session</span><spanclass="plain-syntax">) {</span>
<spanclass="plain-syntax"></span><spanclass="named-paragraph-container code-font"><ahref="1-ia.html#SP3_5"class="named-paragraph-link"><spanclass="named-paragraph">Check this is an open session</span><spanclass="named-paragraph-number">3.5</span></a></span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="named-paragraph-container code-font"><ahref="1-ia.html#SP3_5"class="named-paragraph-link"><spanclass="named-paragraph">Check this is an open session</span><spanclass="named-paragraph-number">3.5</span></a></span><spanclass="plain-syntax">;</span>
<spanclass="plain-syntax"></span><spanclass="named-paragraph-container code-font"><ahref="1-ia.html#SP3_5"class="named-paragraph-link"><spanclass="named-paragraph">Check this is an open session</span><spanclass="named-paragraph-number">3.5</span></a></span><spanclass="plain-syntax">;</span>