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

819 lines
124 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>HTML and JavaScript</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 'HTML and JavaScript' 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#2">Chapter 2: Processing</a></li><li><b>HTML and JavaScript</b></li></ul><p class="purpose">HTML utility code.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Definitions</a></li><li><a href="#SP4">&#167;4. Images</a></li><li><a href="#SP8">&#167;8. HTML file structure</a></li><li><a href="#SP12">&#167;12. Miscellaneous HTML</a></li><li><a href="#SP20">&#167;20. Definitions</a></li><li><a href="#SP22">&#167;22. Topping and tailing</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Definitions. </b></p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b>Keeping track of which images are referred to in the HTML we generate:
</p>
<pre class="display">
<span class="reserved">dictionary</span><span class="plain"> *</span><span class="identifier">image_usages</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="comment"> how many times, if at all, this image has been used</span>
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">image_usage</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">leafname</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">usage_count</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">resolved_to</span><span class="plain">;</span>
<span class="constant">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">image_usage</span><span class="plain">;</span>
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">image_source</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">src</span><span class="plain">; </span><span class="comment"> a location from which images can be taken</span>
<span class="constant">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">image_source</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The structure image_usage is accessed in 3/fln and here.</p>
<p class="endnote">The structure image_source is private to this section.</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>We can either generate entirely fresh HTML pages, or we can inject
material into a division inside a copy of an existing page: this is called
"top-and-tailing".
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">first_request_for_tt</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">; </span><span class="comment"> will the next request be the first?</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">DSET_main_tail_matter</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">DSET_main_top_matter</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">DSET_section_tail_matter</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">DSET_section_top_matter</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. Images. </b>In the Inform application, a special <code class="display"><span class="extract">http</span></code> transport called <code class="display"><span class="extract">inform:</span></code> is used
for references to the in-app documentation, so an image called <code class="display"><span class="extract">orange.png</span></code>
will be found at the URL <code class="display"><span class="extract">inform:/orange.png</span></code>.
</p>
<p class="inwebparagraph">Otherwise, of course, we need to make an images folder alongside the HTML
we produce. It will be called <code class="display"><span class="extract">images</span></code>, so relative to the HTML, the URL
would then be <code class="display"><span class="extract">images/orange.png</span></code>.
</p>
<p class="inwebparagraph">However, it"s also possible that the book"s instructions tell us to use
images from an already-existing location instead.
</p>
<p class="inwebparagraph">Note that each time the URL of an image is looked up, we make a note of it,
so that we can keep track of which images we actually need.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::image_URL<button class="popup" onclick="togglePopup('usagePopup58')">...<span class="popuptext" id="usagePopup58">Usage of <b>HTMLUtilities::image_URL</b>:<br><a href="#SP13">&#167;13</a>, <a href="#SP17">&#167;17</a>, Main - <a href="1-mn.html#SP1_1">&#167;1.1</a><br>Rawtext Reader - <a href="2-rr.html#SP4_5">&#167;4.5</a><br>CSS - <a href="2-css.html#SP7">&#167;7</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">leafname</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">image_usages</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">image_usages</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="reserved">image_usage</span><span class="plain"> *</span><span class="identifier">iu</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="functiontext"><a href="2-dct.html#SP5">Dictionaries::find</a></span><span class="plain">(</span><span class="identifier">image_usages</span><span class="plain">, </span><span class="identifier">leafname</span><span class="plain">)) {</span>
<span class="identifier">iu</span><span class="plain"> = </span><span class="functiontext"><a href="2-dct.html#SP8">Dictionaries::read_value</a></span><span class="plain">(</span><span class="identifier">image_usages</span><span class="plain">, </span><span class="identifier">leafname</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</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">image_usages</span><span class="plain">, </span><span class="identifier">leafname</span><span class="plain">);</span>
<span class="identifier">iu</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">image_usage</span><span class="plain">);</span>
<span class="identifier">iu</span><span class="plain">-&gt;</span><span class="element">usage_count</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="identifier">iu</span><span class="plain">-&gt;</span><span class="element">leafname</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">leafname</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">image_usages</span><span class="plain">, </span><span class="identifier">leafname</span><span class="plain">, </span><span class="identifier">iu</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">iu</span><span class="plain">-&gt;</span><span class="element">usage_count</span><span class="plain">++;</span>
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP2">Filenames::in_folder</a></span><span class="plain">(</span><span class="identifier">indoc_settings</span><span class="plain">-&gt;</span><span class="element">images_path</span><span class="plain">, </span><span class="identifier">leafname</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">indoc_settings</span><span class="plain">-&gt;</span><span class="element">html_for_Inform_application</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"inform:/%/f"</span><span class="plain">, </span><span class="identifier">F</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">indoc_settings</span><span class="plain">-&gt;</span><span class="element">images_copy</span><span class="plain">)</span>
<span class="identifier">F</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP2">Filenames::in_folder</a></span><span class="plain">(</span><span class="functiontext"><a href="3-pth.html#SP5">Pathnames::from_text</a></span><span class="plain">(</span><span class="identifier">I</span><span class="string">"images"</span><span class="plain">), </span><span class="identifier">leafname</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%/f"</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">iu</span><span class="plain">-&gt;</span><span class="element">resolved_to</span><span class="plain"> = </span><span class="identifier">F</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. </b>For ebook use only:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::note_images<button class="popup" onclick="togglePopup('usagePopup59')">...<span class="popuptext" id="usagePopup59">Usage of <b>HTMLUtilities::note_images</b>:<br>Main - <a href="1-mn.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">image_usage</span><span class="plain"> *</span><span class="identifier">iu</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">iu</span><span class="plain">, </span><span class="reserved">image_usage</span><span class="plain">)</span>
<span class="functiontext"><a href="5-ee.html#SP5">Epub::note_image</a></span><span class="plain">(</span><span class="identifier">indoc_settings</span><span class="plain">-&gt;</span><span class="reserved">ebook</span><span class="plain">, </span><span class="identifier">iu</span><span class="plain">-&gt;</span><span class="element">resolved_to</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. </b>Suppose we are indeed copying images into place: we have to get them from
somewhere. The somewheres are folders called "image sources", and this routine
adds one:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::add_image_source<button class="popup" onclick="togglePopup('usagePopup60')">...<span class="popuptext" id="usagePopup60">Usage of <b>HTMLUtilities::add_image_source</b>:<br>Instructions - <a href="1-ins.html#SP3">&#167;3</a>, <a href="1-ins.html#SP5_1">&#167;5.1</a></span></button></span><span class="plain">(</span><span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">path</span><span class="plain">) {</span>
<span class="reserved">image_source</span><span class="plain"> *</span><span class="identifier">is</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">image_source</span><span class="plain">);</span>
<span class="identifier">is</span><span class="plain">-&gt;</span><span class="element">src</span><span class="plain"> = </span><span class="identifier">path</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>During the copying process, we look for each image, say <code class="display"><span class="extract">orange.png</span></code>, in
each of these image sources, starting from the most recently added and
working backwards. As soon as we find a file of that name, we copy it over.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::copy_images<button class="popup" onclick="togglePopup('usagePopup61')">...<span class="popuptext" id="usagePopup61">Usage of <b>HTMLUtilities::copy_images</b>:<br>Main - <a href="1-mn.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">indoc_settings</span><span class="plain">-&gt;</span><span class="element">images_copy</span><span class="plain">) {</span>
<span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="functiontext"><a href="3-pth.html#SP4">Pathnames::subfolder</a></span><span class="plain">(</span><span class="identifier">indoc_settings</span><span class="plain">-&gt;</span><span class="element">destination</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"images"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-pth.html#SP9">Pathnames::create_in_file_system</a></span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="reserved">image_usage</span><span class="plain"> *</span><span class="identifier">iu</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">iu</span><span class="plain">, </span><span class="reserved">image_usage</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">found</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="reserved">image_source</span><span class="plain"> *</span><span class="identifier">is</span><span class="plain">;</span>
<span class="identifier">LOOP_BACKWARDS_OVER</span><span class="plain">(</span><span class="identifier">is</span><span class="plain">, </span><span class="reserved">image_source</span><span class="plain">) {</span>
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP2">Filenames::in_folder</a></span><span class="plain">(</span><span class="identifier">is</span><span class="plain">-&gt;</span><span class="element">src</span><span class="plain">, </span><span class="identifier">iu</span><span class="plain">-&gt;</span><span class="element">leafname</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-tf.html#SP1">TextFiles::exists</a></span><span class="plain">(</span><span class="identifier">F</span><span class="plain">)) {</span>
<span class="identifier">found</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="functiontext"><a href="3-shl.html#SP3">Shell::copy</a></span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="string">"-f"</span><span class="plain">);</span>
<span class="reserved">break</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">found</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) { </span><span class="functiontext"><a href="3-em.html#SP7">Errors::with_text</a></span><span class="plain">(</span><span class="string">"unable to find the image %S"</span><span class="plain">, </span><span class="identifier">iu</span><span class="plain">-&gt;</span><span class="element">leafname</span><span class="plain">); }</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. HTML file structure. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::begin_file<button class="popup" onclick="togglePopup('usagePopup62')">...<span class="popuptext" id="usagePopup62">Usage of <b>HTMLUtilities::begin_file</b>:<br>Renderer - <a href="2-rnd.html#SP16_2">&#167;16.2</a><br>Indexing Utilities - <a href="3-iu.html#SP1">&#167;1</a><br>Codename Midnight - <a href="4-cm.html#SP9_1">&#167;9.1</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="functiontext"><a href="5-htm.html#SP2">HTML::declare_as_HTML</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">indoc_settings</span><span class="plain">-&gt;</span><span class="element">XHTML</span><span class="plain">);</span>
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">CSS</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">V</span><span class="plain">) &amp;&amp; (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">V</span><span class="plain">-&gt;</span><span class="element">vol_CSS_leafname</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">))</span>
<span class="identifier">CSS</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP3">Filenames::from_text</a></span><span class="plain">(</span><span class="identifier">V</span><span class="plain">-&gt;</span><span class="element">vol_CSS_leafname</span><span class="plain">);</span>
<span class="functiontext"><a href="5-htm.html#SP8">HTML::begin_head</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">CSS</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">comment</span><span class="plain">);</span>
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">monthname</span><span class="plain">[12] = { </span><span class="string">"Jan"</span><span class="plain">, </span><span class="string">"Feb"</span><span class="plain">, </span><span class="string">"Mar"</span><span class="plain">, </span><span class="string">"Apr"</span><span class="plain">, </span><span class="string">"May"</span><span class="plain">, </span><span class="string">"Jun"</span><span class="plain">, </span><span class="string">"Jul"</span><span class="plain">, </span><span class="string">"Aug"</span><span class="plain">, </span><span class="string">"Sep"</span><span class="plain">, </span><span class="string">"Oct"</span><span class="plain">, </span><span class="string">"Nov"</span><span class="plain">, </span><span class="string">"Dec"</span><span class="plain"> };</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">comment</span><span class="plain">, </span><span class="string">"Generated by indoc on %d %s %d"</span><span class="plain">,</span>
<span class="identifier">the_present</span><span class="plain">-&gt;</span><span class="identifier">tm_mday</span><span class="plain">, </span><span class="identifier">monthname</span><span class="plain">[</span><span class="identifier">the_present</span><span class="plain">-&gt;</span><span class="identifier">tm_mon</span><span class="plain">], </span><span class="identifier">the_present</span><span class="plain">-&gt;</span><span class="identifier">tm_year</span><span class="plain">+1900);</span>
<span class="functiontext"><a href="5-htm.html#SP19">HTML::comment</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">comment</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">comment</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::write_title<button class="popup" onclick="togglePopup('usagePopup63')">...<span class="popuptext" id="usagePopup63">Usage of <b>HTMLUtilities::write_title</b>:<br>Renderer - <a href="2-rnd.html#SP16_2">&#167;16.2</a><br>Indexing Utilities - <a href="3-iu.html#SP1">&#167;1</a><br>Codename Midnight - <a href="4-cm.html#SP9_1">&#167;9.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">title</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;title&gt;%S&lt;/title&gt;\n"</span><span class="plain">, </span><span class="identifier">title</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP9"></a><b>&#167;9. </b>Here's text within a link:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::general_link<button class="popup" onclick="togglePopup('usagePopup64')">...<span class="popuptext" id="usagePopup64">Usage of <b>HTMLUtilities::general_link</b>:<br><a href="#SP11">&#167;11</a>, Indexing Utilities - <a href="3-iu.html#SP4">&#167;4</a><br>Contents and Indexes - <a href="3-gi.html#SP9_2_3_4">&#167;9.2.3.4</a>, <a href="3-gi.html#SP9_2_3_5">&#167;9.2.3.5</a><br>Examples Index - <a href="3-ei.html#SP3_5">&#167;3.5</a><br>Codename Midnight - <a href="4-cm.html#SP5">&#167;5</a>, <a href="4-cm.html#SP6">&#167;6</a>, <a href="4-cm.html#SP9_3_1">&#167;9.3.1</a>, <a href="4-cm.html#SP9_3_2_1">&#167;9.3.2.1</a>, <a href="4-cm.html#SP10">&#167;10</a><br>Codename Architect - <a href="4-ca.html#SP5">&#167;5</a>, <a href="4-ca.html#SP6">&#167;6</a><br>Codename Twilight - <a href="4-ct.html#SP3">&#167;3</a>, <a href="4-ct.html#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">cl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">to</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">) {</span>
<span class="functiontext"><a href="5-htm.html#SP15">HTML::begin_link_with_class</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">cl</span><span class="plain">, </span><span class="identifier">to</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">text</span><span class="plain">);</span>
<span class="functiontext"><a href="5-htm.html#SP15">HTML::end_link</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="SP10"></a><b>&#167;10. </b>And a link with both text and a title (tooltip) tag:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::titled_link<button class="popup" onclick="togglePopup('usagePopup65')">...<span class="popuptext" id="usagePopup65">Usage of <b>HTMLUtilities::titled_link</b>:<br>none</span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">cl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">to</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">ti</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">) {</span>
<span class="functiontext"><a href="5-htm.html#SP15">HTML::begin_link_with_class_title</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">cl</span><span class="plain">, </span><span class="identifier">to</span><span class="plain">, </span><span class="identifier">ti</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">text</span><span class="plain">);</span>
<span class="functiontext"><a href="5-htm.html#SP15">HTML::end_link</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="SP11"></a><b>&#167;11. </b>And a standardised paragraph which is itself a link:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::textual_link<button class="popup" onclick="togglePopup('usagePopup66')">...<span class="popuptext" id="usagePopup66">Usage of <b>HTMLUtilities::textual_link</b>:<br>Codename Midnight - <a href="4-cm.html#SP9_3_1">&#167;9.3.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">to</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</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="functiontext"><a href="#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">to</span><span class="plain">, </span><span class="identifier">text</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="inwebparagraph"><a id="SP12"></a><b>&#167;12. Miscellaneous HTML. </b>Horizontal ruled lines.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::ruled_line<button class="popup" onclick="togglePopup('usagePopup67')">...<span class="popuptext" id="usagePopup67">Usage of <b>HTMLUtilities::ruled_line</b>:<br>Renderer - <a href="2-rnd.html#SP9_1">&#167;9.1</a><br>Navigational Designs - <a href="4-nd.html#SP6">&#167;6</a><br>Codename Midnight - <a href="4-cm.html#SP4">&#167;4</a><br>Codename Architect - <a href="4-ca.html#SP4">&#167;4</a><br>Codename Twilight - <a href="4-ct.html#SP5">&#167;5</a><br>Codename Roadsign - <a href="4-cr.html#SP5">&#167;5</a>, <a href="4-cr.html#SP6">&#167;6</a><br>Codename Unsigned - <a href="4-cu.html#SP5">&#167;5</a>, <a href="4-cu.html#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">indoc_settings</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain"> == </span><span class="constant">HTML_FORMAT</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="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"----------------------------------------------------------------------\n"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP13"></a><b>&#167;13. </b>Images.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::image_element<button class="popup" onclick="togglePopup('usagePopup68')">...<span class="popuptext" id="usagePopup68">Usage of <b>HTMLUtilities::image_element</b>:<br>Renderer - <a href="2-rnd.html#SP11_2_2_3">&#167;11.2.2.3</a><br>Codename Twilight - <a href="4-ct.html#SP3">&#167;3</a><br>Codename Roadsign - <a href="4-cr.html#SP10">&#167;10</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">, </span><span class="string">"alt=\"%S\" src=\""</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP4">HTMLUtilities::image_URL</a></span><span class="plain">(</span><span class="identifier">details</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">, </span><span class="string">"\""</span><span class="plain">);</span>
<span class="functiontext"><a href="5-htm.html#SP7">HTML::tag</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"img"</span><span class="plain">, </span><span class="identifier">details</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::image_element_scaled<button class="popup" onclick="togglePopup('usagePopup69')">...<span class="popuptext" id="usagePopup69">Usage of <b>HTMLUtilities::image_element_scaled</b>:<br>Renderer - <a href="2-rnd.html#SP11_2_2_3">&#167;11.2.2.3</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">xsize</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">ysize</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">, </span><span class="string">"alt=\"%S\" src=\""</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP4">HTMLUtilities::image_URL</a></span><span class="plain">(</span><span class="identifier">details</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">, </span><span class="string">"\" width=\"%d\" height=\"%d\""</span><span class="plain">, </span><span class="identifier">xsize</span><span class="plain">, </span><span class="identifier">ysize</span><span class="plain">);</span>
<span class="functiontext"><a href="5-htm.html#SP7">HTML::tag</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"img"</span><span class="plain">, </span><span class="identifier">details</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::image_with_id<button class="popup" onclick="togglePopup('usagePopup70')">...<span class="popuptext" id="usagePopup70">Usage of <b>HTMLUtilities::image_with_id</b>:<br>Codename Midnight - <a href="4-cm.html#SP6">&#167;6</a><br>Codename Architect - <a href="4-ca.html#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">id</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">, </span><span class="string">"alt=\"%S\" src=\""</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP4">HTMLUtilities::image_URL</a></span><span class="plain">(</span><span class="identifier">details</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">, </span><span class="string">"\" id=\"%S\""</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">);</span>
<span class="functiontext"><a href="5-htm.html#SP7">HTML::tag</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"img"</span><span class="plain">, </span><span class="identifier">details</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::asterisk_image<button class="popup" onclick="togglePopup('usagePopup71')">...<span class="popuptext" id="usagePopup71">Usage of <b>HTMLUtilities::asterisk_image</b>:<br>Examples - <a href="2-exm.html#SP8_2_2">&#167;8.2.2</a><br>Renderer - <a href="2-rnd.html#SP14">&#167;14</a><br>Codename Roadsign - <a href="4-cr.html#SP6_2">&#167;6.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">, </span><span class="string">"class=\"asterisk\" alt=\"*\" src=\""</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP4">HTMLUtilities::image_URL</a></span><span class="plain">(</span><span class="identifier">details</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">, </span><span class="string">"\""</span><span class="plain">);</span>
<span class="functiontext"><a href="5-htm.html#SP7">HTML::tag_sc</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"img"</span><span class="plain">, </span><span class="identifier">details</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP14"></a><b>&#167;14. </b>The "extra" functions here are for revealing or concealing page content
when the user clicks a button. Each such piece of content is in its own
uniquely-ID'd <code class="display"><span class="extract">&lt;div&gt;</span></code>, as follows:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::extra_div_open<button class="popup" onclick="togglePopup('usagePopup72')">...<span class="popuptext" id="usagePopup72">Usage of <b>HTMLUtilities::extra_div_open</b>:<br>Codename Midnight - <a href="4-cm.html#SP9_3_2_1">&#167;9.3.2.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">id</span><span class="plain">) {</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"div"</span><span class="plain">, </span><span class="string">"id=\"extra%d\" style=\"display: none;\""</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP15"></a><b>&#167;15. </b>And the following links provide the wiring for the buttons:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::extra_link<button class="popup" onclick="togglePopup('usagePopup73')">...<span class="popuptext" id="usagePopup73">Usage of <b>HTMLUtilities::extra_link</b>:<br>Codename Midnight - <a href="4-cm.html#SP9_3_2_1">&#167;9.3.2.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">id</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">onclick</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">onclick</span><span class="plain">, </span><span class="string">"showExtra('extra%d', 'plus%d'); return false;"</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">);</span>
<span class="functiontext"><a href="5-htm.html#SP15">HTML::begin_link_with_class_onclick</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"#"</span><span class="plain">, </span><span class="identifier">onclick</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">onclick</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">, </span><span class="string">"alt=\"show\" id=\"plus%d\" src=\""</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP17">HTMLUtilities::extra_icon</a></span><span class="plain">(</span><span class="identifier">details</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"extra"</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">, </span><span class="string">"\""</span><span class="plain">);</span>
<span class="functiontext"><a href="5-htm.html#SP7">HTML::tag</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"img"</span><span class="plain">, </span><span class="identifier">details</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">details</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">"&amp;#160;"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::all_extras_link<button class="popup" onclick="togglePopup('usagePopup74')">...<span class="popuptext" id="usagePopup74">Usage of <b>HTMLUtilities::all_extras_link</b>:<br>Codename Midnight - <a href="4-cm.html#SP9_3_2">&#167;9.3.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</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">"&amp;#160;"</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">onclick</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">onclick</span><span class="plain">, </span><span class="string">"showExtra%S(); return false;"</span><span class="plain">, </span><span class="identifier">from</span><span class="plain">);</span>
<span class="functiontext"><a href="5-htm.html#SP15">HTML::begin_link_with_class_onclick</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"#"</span><span class="plain">, </span><span class="identifier">onclick</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">onclick</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">, </span><span class="string">"alt=\"show\" id=\"plus%S\" src=\""</span><span class="plain">, </span><span class="identifier">from</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP17">HTMLUtilities::extra_icon</a></span><span class="plain">(</span><span class="identifier">details</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"extrab"</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">, </span><span class="string">"\""</span><span class="plain">);</span>
<span class="functiontext"><a href="5-htm.html#SP7">HTML::tag</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"img"</span><span class="plain">, </span><span class="identifier">details</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">details</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>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP16"></a><b>&#167;16. </b>These links call some standard Javascript functions, thus:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::write_javascript_for_buttons<button class="popup" onclick="togglePopup('usagePopup75')">...<span class="popuptext" id="usagePopup75">Usage of <b>HTMLUtilities::write_javascript_for_buttons</b>:<br>Renderer - <a href="2-rnd.html#SP16_2">&#167;16.2</a><br>Codename Midnight - <a href="4-cm.html#SP9_1">&#167;9.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" function showExtra(id, imid) {\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" if (document.getElementById(id).style.display == 'block') {\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" document.getElementById(id).style.display = 'none';\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" document.getElementById(imid).src = '"</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP17">HTMLUtilities::extra_icon</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"extra"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"';\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" } else {\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" document.getElementById(id).style.display = 'block';\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" document.getElementById(imid).src = '"</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP17">HTMLUtilities::extra_icon</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"extraclose"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"';\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" }\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" }\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" function onLoaded() {\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" if (window.location.hash) {\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" var hash = window.location.hash.substring(2);\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" if (hash.search(\"_\") &gt;= 0) {\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" var res = hash.split(\"_\");\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" showExample(\"example\"+res[1]);\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" } else {\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" showExample(\"example\"+hash);\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" }\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" }\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" }\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" window.onload=onLoaded;\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" function showExample(id) {\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" if (document.getElementById(id).style.display == 'block') {\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" document.getElementById(id).style.display = 'none';\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" } else {\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" document.getElementById(id).style.display = 'block';\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" }\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" }\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" function openExtra(id, imid) {\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" document.getElementById(id).style.display = 'block';\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" document.getElementById(imid).src = '"</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP17">HTMLUtilities::extra_icon</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"extraclose"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"';\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" }\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" function closeExtra(id, imid) {\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" document.getElementById(id).style.display = 'none';\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" document.getElementById(imid).src = '"</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP17">HTMLUtilities::extra_icon</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"extra"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"';\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" }\n"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP17"></a><b>&#167;17. </b>Where:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::extra_icon<button class="popup" onclick="togglePopup('usagePopup76')">...<span class="popuptext" id="usagePopup76">Usage of <b>HTMLUtilities::extra_icon</b>:<br><a href="#SP15">&#167;15</a>, <a href="#SP16">&#167;16</a>, <a href="#SP18">&#167;18</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">img</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">img</span><span class="plain">, </span><span class="string">"%S.png"</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP4">HTMLUtilities::image_URL</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">img</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">img</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP18"></a><b>&#167;18. </b>And the following compiles a set of specific functions for numbered buttons,
used on the Contents page:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::write_javascript_for_contents_buttons<button class="popup" onclick="togglePopup('usagePopup77')">...<span class="popuptext" id="usagePopup77">Usage of <b>HTMLUtilities::write_javascript_for_contents_buttons</b>:<br>Codename Midnight - <a href="4-cm.html#SP9_1">&#167;9.1</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="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="reserved">volume</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" function showExtra%S() {\n"</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">-&gt;</span><span class="element">vol_abbrev</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" if (document.getElementById('plus%S').src.indexOf('"</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">-&gt;</span><span class="element">vol_abbrev</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP17">HTMLUtilities::extra_icon</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"extrab"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"') &gt;= 0) {\n"</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">V</span><span class="plain">-&gt;</span><span class="element">vol_chapter_count</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">bn</span><span class="plain"> = (</span><span class="identifier">V</span><span class="plain">-&gt;</span><span class="element">allocation_id</span><span class="plain">)*1000+</span><span class="identifier">i</span><span class="plain">;</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" openExtra('extra%d', 'plus%d');\n"</span><span class="plain">, </span><span class="identifier">bn</span><span class="plain">, </span><span class="identifier">bn</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" document.getElementById('plus%S').src = '"</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">-&gt;</span><span class="element">vol_abbrev</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP17">HTMLUtilities::extra_icon</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"extracloseb"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"';\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" } else {\n"</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">V</span><span class="plain">-&gt;</span><span class="element">vol_chapter_count</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">bn</span><span class="plain"> = (</span><span class="identifier">V</span><span class="plain">-&gt;</span><span class="element">allocation_id</span><span class="plain">)*1000+</span><span class="identifier">i</span><span class="plain">;</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" closeExtra('extra%d', 'plus%d');\n"</span><span class="plain">, </span><span class="identifier">bn</span><span class="plain">, </span><span class="identifier">bn</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" document.getElementById('plus%S').src = '"</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">-&gt;</span><span class="element">vol_abbrev</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP17">HTMLUtilities::extra_icon</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"extrab"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"';\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" }\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" }\n"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP19"></a><b>&#167;19. </b>JavaScript to handle the paste icon works differently on different platforms.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::paste_script<button class="popup" onclick="togglePopup('usagePopup78')">...<span class="popuptext" id="usagePopup78">Usage of <b>HTMLUtilities::paste_script</b>:<br>Renderer - <a href="2-rnd.html#SP11_2_2_3">&#167;11.2.2.3</a>, <a href="2-rnd.html#SP16_2">&#167;16.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">content</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">code_num</span><span class="plain">) {</span>
<span class="functiontext"><a href="5-htm.html#SP10">HTML::open_javascript</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"function pasteCode"</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">content</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"(code"</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">"%d(code"</span><span class="plain">, </span><span class="identifier">code_num</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">") {\n"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">indoc_settings</span><span class="plain">-&gt;</span><span class="element">javascript_paste_method</span><span class="plain"> == </span><span class="constant">PASTEMODE_Andrew</span><span class="plain">)</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" var myProject = window.Project;\n"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">indoc_settings</span><span class="plain">-&gt;</span><span class="element">javascript_paste_method</span><span class="plain"> == </span><span class="constant">PASTEMODE_David</span><span class="plain">)</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" var myProject = external.Project;\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" myProject.selectView('source');\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" myProject.pasteCode("</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">content</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) { </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"code"</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">content</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">");\n}\n"</span><span class="plain">);</span>
<span class="functiontext"><a href="5-htm.html#SP10">HTML::close_javascript</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::create_script<button class="popup" onclick="togglePopup('usagePopup79')">...<span class="popuptext" id="usagePopup79">Usage of <b>HTMLUtilities::create_script</b>:<br>Renderer - <a href="2-rnd.html#SP11_2_2_3">&#167;11.2.2.3</a>, <a href="2-rnd.html#SP16_2">&#167;16.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">content</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">code_num</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">titling</span><span class="plain">) {</span>
<span class="functiontext"><a href="5-htm.html#SP10">HTML::open_javascript</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"function createNewProject"</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">content</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"(code"</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">"%d(code"</span><span class="plain">, </span><span class="identifier">code_num</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">", title) {\n"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">indoc_settings</span><span class="plain">-&gt;</span><span class="element">javascript_paste_method</span><span class="plain"> == </span><span class="constant">PASTEMODE_Andrew</span><span class="plain">)</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" var myProject = window.Project;\n"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">indoc_settings</span><span class="plain">-&gt;</span><span class="element">javascript_paste_method</span><span class="plain"> == </span><span class="constant">PASTEMODE_David</span><span class="plain">)</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" var myProject = external.Project;\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" myProject.createNewProject("</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">content</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"title"</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">titling</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="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">content</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"code"</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">content</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">");\n}\n"</span><span class="plain">);</span>
<span class="functiontext"><a href="5-htm.html#SP10">HTML::close_javascript</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="SP20"></a><b>&#167;20. Definitions. </b>Some nice little boxes for syntax definitions in computery manuals:
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_definition_anchors</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::definition_box<button class="popup" onclick="togglePopup('usagePopup80')">...<span class="popuptext" id="usagePopup80">Usage of <b>HTMLUtilities::definition_box</b>:<br>Rawtext Reader - <a href="2-rr.html#SP4_6_2">&#167;4.6.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">defn</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">sigil</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">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">indoc_settings</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain"> == </span><span class="constant">HTML_FORMAT</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">anchor</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">anchor</span><span class="plain">, </span><span class="string">"defn%d"</span><span class="plain">, </span><span class="identifier">no_definition_anchors</span><span class="plain">++);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">comment</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">comment</span><span class="plain">, </span><span class="string">"START PHRASE \"%S\""</span><span class="plain">, </span><span class="identifier">anchor</span><span class="plain">);</span>
<span class="functiontext"><a href="5-htm.html#SP19">HTML::comment</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">comment</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">comment</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"div"</span><span class="plain">, </span><span class="string">"class=\"definition\""</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">anchor</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP21">HTMLUtilities::defn_unpack</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">defn</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">anchor</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">anchor</span><span class="plain">);</span>
<span class="functiontext"><a href="5-htm.html#SP19">HTML::comment</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"END PHRASE"</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">defnhead</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">defnhead</span><span class="plain">, </span><span class="string">"definition of %S"</span><span class="plain">, </span><span class="identifier">sigil</span><span class="plain">);</span>
<span class="functiontext"><a href="5-htm.html#SP19">HTML::comment</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">defnhead</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">defnhead</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">"PHRASE: %S\n"</span><span class="plain">, </span><span class="identifier">defn</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::end_definition_box<button class="popup" onclick="togglePopup('usagePopup81')">...<span class="popuptext" id="usagePopup81">Usage of <b>HTMLUtilities::end_definition_box</b>:<br>Rawtext Reader - <a href="2-rr.html#SP4_6_2">&#167;4.6.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">indoc_settings</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain"> == </span><span class="constant">HTML_FORMAT</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
<span class="functiontext"><a href="5-htm.html#SP19">HTML::comment</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"end definition"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"div"</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">"\n"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP21"></a><b>&#167;21. </b>Though these are in fact quite a lot of trouble:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::defn_unpack<button class="popup" onclick="togglePopup('usagePopup82')">...<span class="popuptext" id="usagePopup82">Usage of <b>HTMLUtilities::defn_unpack</b>:<br><a href="#SP20">&#167;20</a>, <a href="#SP21_1">&#167;21.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">given_defn</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">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">anchor</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>
&lt;<span class="cwebmacro">Given alternates divided by an ampersand, recurse to unpack each in turn</span> <span class="cwebmacronumber">21.1</span>&gt;<span class="plain">;</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">defn</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">defn</span><span class="plain">, </span><span class="identifier">given_defn</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">index_as</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Work out an index mark for this definition</span> <span class="cwebmacronumber">21.2</span>&gt;<span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">indoc_settings</span><span class="plain">-&gt;</span><span class="element">inform_definitions_mode</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Rewrite definition as an HTML paragraph of class defnprototype</span> <span class="cwebmacronumber">21.3</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Set the kind of the result of the phrase in italic, not bold</span> <span class="cwebmacronumber">21.4</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Specially set and specially index a phrase to decide a condition</span> <span class="cwebmacronumber">21.5</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Specially set and specially index a text substitution</span> <span class="cwebmacronumber">21.6</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Tidy up the definition paragraph</span> <span class="cwebmacronumber">21.7</span>&gt;<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">defn</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</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=\"definitionterm\""</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">defn</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="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="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP21_1"></a><b>&#167;21.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Given alternates divided by an ampersand, recurse to unpack each in turn</span> <span class="cwebmacronumber">21.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<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">given_defn</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c*?) &amp; (%c*)"</span><span class="plain">)) {</span>
<span class="functiontext"><a href="#SP21">HTMLUtilities::defn_unpack</a></span><span class="plain">(</span><span class="identifier">OUT</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">V</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">anchor</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="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;i&gt;or:&lt;/i&gt;&amp;#160;&amp;#160;&amp;#160;"</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP21">HTMLUtilities::defn_unpack</a></span><span class="plain">(</span><span class="identifier">OUT</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">V</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">anchor</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="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP21">&#167;21</a>.</p>
<p class="inwebparagraph"><a id="SP21_2"></a><b>&#167;21.2. </b><code class="display">
&lt;<span class="cwebmacrodefn">Work out an index mark for this definition</span> <span class="cwebmacronumber">21.2</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">index_as</span><span class="plain">, </span><span class="identifier">given_defn</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">indoc_settings</span><span class="plain">-&gt;</span><span class="element">inform_definitions_mode</span><span class="plain">) </span><span class="functiontext"><a href="4-pm.html#SP14">Regexp::replace</a></span><span class="plain">(</span><span class="identifier">index_as</span><span class="plain">, </span><span class="identifier">L</span><span class="string">" ...%c*"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="constant">0</span><span class="plain">);</span>
<span class="functiontext"><a href="4-pm.html#SP14">Regexp::replace</a></span><span class="plain">(</span><span class="identifier">index_as</span><span class="plain">, </span><span class="identifier">L</span><span class="string">": *"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="constant">0</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">index_as</span><span class="plain">, </span><span class="string">"=___=!definition"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-gi.html#SP6">Indexes::mark_index_term</a></span><span class="plain">(</span><span class="identifier">index_as</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">anchor</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP21">&#167;21</a>.</p>
<p class="inwebparagraph"><a id="SP21_3"></a><b>&#167;21.3. </b><code class="display">
&lt;<span class="cwebmacrodefn">Rewrite definition as an HTML paragraph of class defnprototype</span> <span class="cwebmacronumber">21.3</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">proto</span><span class="plain">);</span>
<span class="functiontext"><a href="5-htm.html#SP7">HTML::open</a></span><span class="plain">(</span><span class="identifier">proto</span><span class="plain">, </span><span class="string">"p"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"class='defnprototype'"</span><span class="plain">);</span>
<span class="comment"> given alternative wordings, put only the first in boldface</span>
<span class="functiontext"><a href="4-pm.html#SP14">Regexp::replace</a></span><span class="plain">(</span><span class="identifier">defn</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%i+?)/(%C+)"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"%0&lt;/b&gt;/%1&lt;b&gt;"</span><span class="plain">, </span><span class="constant">REP_REPEATING</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">proto</span><span class="plain">, </span><span class="string">"&lt;b&gt;%S&lt;/b&gt;"</span><span class="plain">, </span><span class="identifier">defn</span><span class="plain">);</span>
<span class="functiontext"><a href="5-htm.html#SP7">HTML::close</a></span><span class="plain">(</span><span class="identifier">proto</span><span class="plain">, </span><span class="string">"p"</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">defn</span><span class="plain">, </span><span class="identifier">proto</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP21">&#167;21</a>.</p>
<p class="inwebparagraph"><a id="SP21_4"></a><b>&#167;21.4. </b><code class="display">
&lt;<span class="cwebmacrodefn">Set the kind of the result of the phrase in italic, not bold</span> <span class="cwebmacronumber">21.4</span>&gt; =
</code></p>
<pre class="displaydefn">
<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">defn</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c*) ... (%c*?)&lt;/b&gt;"</span><span class="plain">)) {</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">defn</span><span class="plain">, </span><span class="string">"%S&lt;/b&gt; ... &lt;i&gt;"</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="functiontext"><a href="4-pm.html#SP14">Regexp::replace</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">L</span><span class="string">"&lt;b&gt;"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="constant">REP_REPEATING</span><span class="plain">);</span>
<span class="functiontext"><a href="4-pm.html#SP14">Regexp::replace</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">L</span><span class="string">"&lt;/b&gt;"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="constant">REP_REPEATING</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">defn</span><span class="plain">, </span><span class="string">"%S&lt;/i&gt;"</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="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP21">&#167;21</a>.</p>
<p class="inwebparagraph"><a id="SP21_5"></a><b>&#167;21.5. </b><code class="display">
&lt;<span class="cwebmacrodefn">Specially set and specially index a phrase to decide a condition</span> <span class="cwebmacronumber">21.5</span>&gt; =
</code></p>
<pre class="displaydefn">
<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">defn</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"&lt;b&gt;if (%c*)"</span><span class="plain">)) &amp;&amp;</span>
<span class="plain">(</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">defn</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"%c*a condition%c*"</span><span class="plain">))) {</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">defn</span><span class="plain">, </span><span class="string">"&lt;i&gt;if&lt;/i&gt; &lt;b&gt;%S"</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="functiontext"><a href="4-pm.html#SP14">Regexp::replace</a></span><span class="plain">(</span><span class="identifier">index_as</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"if "</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="constant">REP_ATSTART</span><span class="plain">);</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">index_alph</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="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">index_as</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"%(%c*?%) (%c*)"</span><span class="plain">)) </span><span class="identifier">index_alph</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">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">term</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">term</span><span class="plain">, </span><span class="string">"%S=___=!if-definition"</span><span class="plain">, </span><span class="identifier">index_as</span><span class="plain">);</span>
<span class="functiontext"><a href="3-gi.html#SP6">Indexes::mark_index_term</a></span><span class="plain">(</span><span class="identifier">term</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">anchor</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">index_alph</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">term</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP21">&#167;21</a>.</p>
<p class="inwebparagraph"><a id="SP21_6"></a><b>&#167;21.6. </b><code class="display">
&lt;<span class="cwebmacrodefn">Specially set and specially index a text substitution</span> <span class="cwebmacronumber">21.6</span>&gt; =
</code></p>
<pre class="displaydefn">
<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">defn</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"&lt;b&gt;say \"%[(%c*)%]\"&lt;/b&gt;"</span><span class="plain">)) {</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">defn</span><span class="plain">, </span><span class="string">"say \"[&lt;b&gt;%S&lt;/b&gt;]\""</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="functiontext"><a href="4-pm.html#SP14">Regexp::replace</a></span><span class="plain">(</span><span class="identifier">index_as</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"say "</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="constant">REP_ATSTART</span><span class="plain">);</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">index_alph</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="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">index_as</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"%[%(?:%(%c*?%) %)?(%c*)%]"</span><span class="plain">)) </span><span class="identifier">index_alph</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">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">term</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">term</span><span class="plain">, </span><span class="string">"%S=___=!say-definition"</span><span class="plain">, </span><span class="identifier">index_as</span><span class="plain">);</span>
<span class="functiontext"><a href="3-gi.html#SP6">Indexes::mark_index_term</a></span><span class="plain">(</span><span class="identifier">term</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">anchor</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">index_alph</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">term</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP21">&#167;21</a>.</p>
<p class="inwebparagraph"><a id="SP21_7"></a><b>&#167;21.7. </b><code class="display">
&lt;<span class="cwebmacrodefn">Tidy up the definition paragraph</span> <span class="cwebmacronumber">21.7</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="functiontext"><a href="4-pm.html#SP14">Regexp::replace</a></span><span class="plain">(</span><span class="identifier">defn</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"&lt;b&gt;&lt;/b&gt;"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="constant">REP_REPEATING</span><span class="plain">);</span>
<span class="functiontext"><a href="4-pm.html#SP14">Regexp::replace</a></span><span class="plain">(</span><span class="identifier">defn</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"&lt;/b&gt;&lt;b&gt;"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="constant">REP_REPEATING</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">star</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">star</span><span class="plain">, </span><span class="identifier">defn</span><span class="plain">);</span>
<span class="functiontext"><a href="4-sm.html#SP15">Str::clear</a></span><span class="plain">(</span><span class="identifier">defn</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bl</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">while</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">star</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c)(%c*)"</span><span class="plain">)) {</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">ch</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="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">star</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="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">ch</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"("</span><span class="plain">)) { </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bl</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">defn</span><span class="plain">, </span><span class="string">"&lt;/b&gt;"</span><span class="plain">); </span><span class="identifier">bl</span><span class="plain">++; }</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">defn</span><span class="plain">, </span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">ch</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">ch</span><span class="plain">, </span><span class="identifier">I</span><span class="string">")"</span><span class="plain">)) { </span><span class="identifier">bl</span><span class="plain">--; </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bl</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">defn</span><span class="plain">, </span><span class="string">"&lt;b&gt;"</span><span class="plain">); }</span>
<span class="plain">}</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">star</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP21">&#167;21</a>.</p>
<p class="inwebparagraph"><a id="SP22"></a><b>&#167;22. Topping and tailing. </b>If we're preparing HTML for use in a website, we probably want our
documentation content to be just one <code class="display"><span class="extract">&lt;div&gt;</span></code> in a larger page whose
design <code class="display"><span class="extract">indoc</span></code> knows nothing about. The following therefore lets us
use an external file as the prototype, cutting it up into a head before
the text <code class="display"><span class="extract">[TEXT]</span></code> and a tail afterwards.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::read_top_and_tail_matter<button class="popup" onclick="togglePopup('usagePopup83')">...<span class="popuptext" id="usagePopup83">Usage of <b>HTMLUtilities::read_top_and_tail_matter</b>:<br><a href="#SP24">&#167;24</a></span></button></span><span class="plain">(</span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">main_flag</span><span class="plain">) {</span>
<span class="reserved">tt_helper_state</span><span class="plain"> </span><span class="identifier">tths</span><span class="plain">;</span>
<span class="identifier">tths</span><span class="plain">.</span><span class="element">pretext</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">main_flag</span><span class="plain">) {</span>
<span class="identifier">DSET_main_top_matter</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP2">Str::new</a></span><span class="plain">();</span>
<span class="identifier">DSET_main_tail_matter</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP2">Str::new</a></span><span class="plain">();</span>
<span class="identifier">tths</span><span class="plain">.</span><span class="element">top_text</span><span class="plain"> = </span><span class="identifier">DSET_main_top_matter</span><span class="plain">;</span>
<span class="identifier">tths</span><span class="plain">.</span><span class="element">tail_text</span><span class="plain"> = </span><span class="identifier">DSET_main_tail_matter</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">DSET_section_top_matter</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP2">Str::new</a></span><span class="plain">();</span>
<span class="identifier">DSET_section_tail_matter</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP2">Str::new</a></span><span class="plain">();</span>
<span class="identifier">tths</span><span class="plain">.</span><span class="element">top_text</span><span class="plain"> = </span><span class="identifier">DSET_section_top_matter</span><span class="plain">;</span>
<span class="identifier">tths</span><span class="plain">.</span><span class="element">tail_text</span><span class="plain"> = </span><span class="identifier">DSET_section_tail_matter</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="functiontext"><a href="4-tf.html#SP5">TextFiles::read</a></span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="string">"can't read top and tail file"</span><span class="plain">,</span>
<span class="constant">TRUE</span><span class="plain">, </span><span class="functiontext"><a href="#SP23">HTMLUtilities::tt_helper</a></span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, &amp;</span><span class="identifier">tths</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP23"></a><b>&#167;23. </b></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">tt_helper_state</span><span class="plain"> {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">pretext</span><span class="plain">;</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">top_text</span><span class="plain">;</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">tail_text</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">tt_helper_state</span><span class="plain">;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::tt_helper<button class="popup" onclick="togglePopup('usagePopup84')">...<span class="popuptext" id="usagePopup84">Usage of <b>HTMLUtilities::tt_helper</b>:<br><a href="#SP22">&#167;22</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">line</span><span class="plain">, </span><span class="reserved">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">v_tths</span><span class="plain">) {</span>
<span class="reserved">tt_helper_state</span><span class="plain"> *</span><span class="identifier">tths</span><span class="plain"> = (</span><span class="reserved">tt_helper_state</span><span class="plain"> *) </span><span class="identifier">v_tths</span><span class="plain">;</span>
<span class="functiontext"><a href="4-sm.html#SP23">Str::trim_white_space_at_end</a></span><span class="plain">(</span><span class="identifier">line</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">line</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c*?)%[TEXT%](%c*)"</span><span class="plain">)) {</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tths</span><span class="plain">-&gt;</span><span class="element">top_text</span><span class="plain">, </span><span class="string">"%S"</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="functiontext"><a href="5-htm.html#SP13">HTML::begin_div_with_id</a></span><span class="plain">(</span><span class="identifier">tths</span><span class="plain">-&gt;</span><span class="element">top_text</span><span class="plain">, </span><span class="string">"bodytext"</span><span class="plain">);</span>
<span class="functiontext"><a href="5-htm.html#SP13">HTML::end_div</a></span><span class="plain">(</span><span class="identifier">tths</span><span class="plain">-&gt;</span><span class="element">tail_text</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tths</span><span class="plain">-&gt;</span><span class="element">tail_text</span><span class="plain">, </span><span class="string">"%S\n"</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-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">tths</span><span class="plain">-&gt;</span><span class="element">pretext</span><span class="plain"> = </span><span class="constant">FALSE</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">tths</span><span class="plain">-&gt;</span><span class="identifier">pretext</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tths</span><span class="plain">-&gt;</span><span class="element">top_text</span><span class="plain">, </span><span class="string">"%S\n"</span><span class="plain">, </span><span class="identifier">line</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tths</span><span class="plain">-&gt;</span><span class="element">tail_text</span><span class="plain">, </span><span class="string">"%S\n"</span><span class="plain">, </span><span class="identifier">line</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The structure tt_helper_state is private to this section.</p>
<p class="inwebparagraph"><a id="SP24"></a><b>&#167;24. </b>And this routine caches requests for tops or tails.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLUtilities::get_tt_matter<button class="popup" onclick="togglePopup('usagePopup85')">...<span class="popuptext" id="usagePopup85">Usage of <b>HTMLUtilities::get_tt_matter</b>:<br>Renderer - <a href="2-rnd.html#SP16_2">&#167;16.2</a>, <a href="2-rnd.html#SP16_1_1">&#167;16.1.1</a><br>Indexing Utilities - <a href="3-iu.html#SP1">&#167;1</a>, <a href="3-iu.html#SP2">&#167;2</a><br>Codename Midnight - <a href="4-cm.html#SP9_1">&#167;9.1</a>, <a href="4-cm.html#SP9_2">&#167;9.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">top</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="functiontext"><a href="1-mn.html#SP1">main</a></span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">first_request_for_tt</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">indoc_settings</span><span class="plain">-&gt;</span><span class="element">top_and_tail_sections</span><span class="plain">)</span>
<span class="functiontext"><a href="#SP22">HTMLUtilities::read_top_and_tail_matter</a></span><span class="plain">(</span><span class="identifier">indoc_settings</span><span class="plain">-&gt;</span><span class="element">top_and_tail_sections</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">indoc_settings</span><span class="plain">-&gt;</span><span class="element">top_and_tail</span><span class="plain">)</span>
<span class="functiontext"><a href="#SP22">HTMLUtilities::read_top_and_tail_matter</a></span><span class="plain">(</span><span class="identifier">indoc_settings</span><span class="plain">-&gt;</span><span class="element">top_and_tail</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">first_request_for_tt</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">top</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) &amp;&amp; (</span><span class="functiontext"><a href="1-mn.html#SP1">main</a></span><span class="plain"> == </span><span class="constant">1</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">DSET_main_top_matter</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">top</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) &amp;&amp; (</span><span class="functiontext"><a href="1-mn.html#SP1">main</a></span><span class="plain"> == </span><span class="constant">0</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">DSET_main_tail_matter</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">top</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) &amp;&amp; (</span><span class="functiontext"><a href="1-mn.html#SP1">main</a></span><span class="plain"> == </span><span class="constant">1</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">DSET_section_top_matter</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">top</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) &amp;&amp; (</span><span class="functiontext"><a href="1-mn.html#SP1">main</a></span><span class="plain"> == </span><span class="constant">0</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">DSET_section_tail_matter</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<hr class="tocbar">
<ul class="toc"><li><a href="2-utc.html">Back to 'Updating the Cross-References'</a></li><li><a href="2-css.html">Continue with 'CSS'</a></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>