inweb-bootstrap/docs/foundation-module/5-htm.html
2020-04-09 18:32:37 +01:00

1007 lines
156 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>HTML</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="../webs.html">Sources</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
<h2>Foundation</h2>
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'HTML' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#5">Chapter 5: Generating Websites</a></li><li><b>HTML</b></li></ul><p class="purpose">Utility functions for writing HTML.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Abstraction</a></li><li><a href="#SP8">&#167;8. Head</a></li><li><a href="#SP10">&#167;10. Scripts and styles</a></li><li><a href="#SP12">&#167;12. Body</a></li><li><a href="#SP13">&#167;13. Divisions</a></li><li><a href="#SP14">&#167;14. Images</a></li><li><a href="#SP15">&#167;15. Links</a></li><li><a href="#SP16">&#167;16. Tables</a></li><li><a href="#SP18">&#167;18. Round-rects</a></li><li><a href="#SP19">&#167;19. Miscellaneous</a></li><li><a href="#SP20">&#167;20. HTML colours</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Abstraction. </b>Though the code below does nothing at all interesting, to put it mildly,
it's written a little defensively, to increase the chances that the client
is producing valid HTML with it. In particular, the client won't be
allowed to open a <code class="display"><span class="extract">p</span></code> tag, then open a <code class="display"><span class="extract">b</span></code> tag, then close the <code class="display"><span class="extract">p</span></code>, then
close the <code class="display"><span class="extract">b</span></code>: that would be wrongly nested. We want to throw errors like
that into the debugging log, so:
</p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="identifier">tag_error</span><span class="plain">(</span><span class="identifier">x</span><span class="plain">) { </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Tag error: %s\n"</span><span class="plain">, </span><span class="identifier">x</span><span class="plain">); }</span>
</pre>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b>Any text stream can be declared as being HTML, and therefore subject to
this auditing. To do that, we atach an <code class="display"><span class="extract">HTML_file_state</span></code> object to the
text stream.
</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">HTML_file_state</span><span class="plain"> {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">XHTML_flag</span><span class="plain">; </span><span class="comment"> writing strict XHTML for use in epubs</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="constant">lifo_stack</span><span class="plain"> *</span><span class="identifier">tag_stack</span><span class="plain">; </span><span class="comment"> of <code class="display"><span class="extract">HTML_tag</span></code>: those currently open</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">CSS_included</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">JS_included</span><span class="plain">;</span>
<span class="constant">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">HTML_file_state</span><span class="plain">;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::declare_as_HTML</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">XHTML</span><span class="plain">) {</span>
<span class="reserved">HTML_file_state</span><span class="plain"> *</span><span class="identifier">hs</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">HTML_file_state</span><span class="plain">);</span>
<span class="identifier">hs</span><span class="plain">-&gt;</span><span class="element">XHTML_flag</span><span class="plain"> = </span><span class="identifier">XHTML</span><span class="plain">;</span>
<span class="identifier">hs</span><span class="plain">-&gt;</span><span class="element">tag_stack</span><span class="plain"> = </span><span class="identifier">NEW_LIFO_STACK</span><span class="plain">(</span><span class="reserved">HTML_tag</span><span class="plain">);</span>
<span class="identifier">hs</span><span class="plain">-&gt;</span><span class="element">CSS_included</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="identifier">hs</span><span class="plain">-&gt;</span><span class="element">JS_included</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="functiontext">Streams::declare_as_HTML</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">hs</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function HTML::declare_as_HTML is used in 5/ee (<a href="5-ee.html#SP6_3">&#167;6.3</a>).</p>
<p class="endnote">The structure HTML_file_state is private to this section.</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>What we require is that any tag "pushed" to the file must later be "pulled",
and in the right order. Thus we can't open body, open div, close body, because
that would be a div tag which was pushed but not pulled.
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">unique_xref</span><span class="plain"> = </span><span class="constant">0</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">HTML_tag</span><span class="plain"> {</span>
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">tag_name</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">tag_xref</span><span class="plain">;</span>
<span class="constant">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">HTML_tag</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">HTML::push_tag</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">u</span><span class="plain"> = </span><span class="identifier">unique_xref</span><span class="plain">++;</span>
<span class="reserved">HTML_file_state</span><span class="plain"> *</span><span class="identifier">hs</span><span class="plain"> = </span><span class="functiontext">Streams::get_HTML_file_state</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">hs</span><span class="plain">) {</span>
<span class="reserved">HTML_tag</span><span class="plain"> *</span><span class="identifier">ht</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">HTML_tag</span><span class="plain">);</span>
<span class="identifier">ht</span><span class="plain">-&gt;</span><span class="element">tag_name</span><span class="plain"> = </span><span class="identifier">tag</span><span class="plain">;</span>
<span class="identifier">ht</span><span class="plain">-&gt;</span><span class="element">tag_xref</span><span class="plain"> = </span><span class="identifier">u</span><span class="plain">;</span>
<span class="identifier">PUSH_TO_LIFO_STACK</span><span class="plain">(</span><span class="identifier">ht</span><span class="plain">, </span><span class="reserved">HTML_tag</span><span class="plain">, </span><span class="identifier">hs</span><span class="plain">-&gt;</span><span class="element">tag_stack</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">u</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function HTML::push_tag is used in <a href="#SP7">&#167;7</a>.</p>
<p class="endnote">The structure HTML_tag is accessed in 8/ws and here.</p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::pop_tag</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">) {</span>
<span class="reserved">HTML_file_state</span><span class="plain"> *</span><span class="identifier">hs</span><span class="plain"> = </span><span class="functiontext">Streams::get_HTML_file_state</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">hs</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">LIFO_STACK_EMPTY</span><span class="plain">(</span><span class="reserved">HTML_tag</span><span class="plain">, </span><span class="identifier">hs</span><span class="plain">-&gt;</span><span class="element">tag_stack</span><span class="plain">)) {</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"{tag: %s}\n"</span><span class="plain">, </span><span class="identifier">tag</span><span class="plain">);</span>
<span class="identifier">tag_error</span><span class="plain">(</span><span class="string">"closed HTML tag which wasn't open"</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">HTML_tag</span><span class="plain"> *</span><span class="identifier">ht</span><span class="plain"> = </span><span class="identifier">TOP_OF_LIFO_STACK</span><span class="plain">(</span><span class="reserved">HTML_tag</span><span class="plain">, </span><span class="identifier">hs</span><span class="plain">-&gt;</span><span class="element">tag_stack</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">strcmp</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">, </span><span class="identifier">ht</span><span class="plain">-&gt;</span><span class="element">tag_name</span><span class="plain">) != </span><span class="constant">0</span><span class="plain">) {</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"{expected to close tag %s (%d), but actually closed %s}\n"</span><span class="plain">,</span>
<span class="identifier">ht</span><span class="plain">-&gt;</span><span class="element">tag_name</span><span class="plain">, </span><span class="identifier">ht</span><span class="plain">-&gt;</span><span class="element">tag_xref</span><span class="plain">, </span><span class="identifier">tag</span><span class="plain">);</span>
<span class="identifier">tag_error</span><span class="plain">(</span><span class="string">"closed HTML tag which wasn't open"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">POP_LIFO_STACK</span><span class="plain">(</span><span class="reserved">HTML_tag</span><span class="plain">, </span><span class="identifier">hs</span><span class="plain">-&gt;</span><span class="element">tag_stack</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function HTML::pop_tag is used in <a href="#SP7">&#167;7</a>.</p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. </b>At the end, therefore, no tags must remain unpulled.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::completed</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="reserved">HTML_file_state</span><span class="plain"> *</span><span class="identifier">hs</span><span class="plain"> = </span><span class="functiontext">Streams::get_HTML_file_state</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">hs</span><span class="plain">) &amp;&amp; (</span><span class="identifier">LIFO_STACK_EMPTY</span><span class="plain">(</span><span class="reserved">HTML_tag</span><span class="plain">, </span><span class="identifier">hs</span><span class="plain">-&gt;</span><span class="element">tag_stack</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)) {</span>
<span class="reserved">HTML_tag</span><span class="plain"> *</span><span class="identifier">ht</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"HTML tag stack: "</span><span class="plain">);</span>
<span class="identifier">LOOP_DOWN_LIFO_STACK</span><span class="plain">(</span><span class="identifier">ht</span><span class="plain">, </span><span class="reserved">HTML_tag</span><span class="plain">, </span><span class="identifier">hs</span><span class="plain">-&gt;</span><span class="element">tag_stack</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">++ &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">" in "</span><span class="plain">);</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"%s (%d)"</span><span class="plain">, </span><span class="identifier">ht</span><span class="plain">-&gt;</span><span class="element">tag_name</span><span class="plain">, </span><span class="identifier">ht</span><span class="plain">-&gt;</span><span class="identifier">tag_xref</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
<span class="identifier">tag_error</span><span class="plain">(</span><span class="string">"HTML tags still open"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function HTML::completed is used in 5/ee (<a href="5-ee.html#SP6_3">&#167;6.3</a>).</p>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. </b>We will open and close all HTML tags using the following macros, two
of which are variadic and have to be written out the old-fashioned way:
</p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">) </span><span class="functiontext">HTML::tag</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">tag</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="definitionkeyword">define</span> <span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">) </span><span class="functiontext">HTML::open</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">tag</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="definitionkeyword">define</span> <span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">) </span><span class="functiontext">HTML::close</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">tag</span><span class="plain">);</span>
</pre>
<pre class="display">
<span class="plain">#</span><span class="identifier">define</span><span class="plain"> </span><span class="identifier">HTML_TAG_WITH</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">, </span><span class="identifier">args</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="identifier">args</span><span class="plain">); \</span>
<span class="functiontext">HTML::tag</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">tag</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="plain">#</span><span class="identifier">define</span><span class="plain"> </span><span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">, </span><span class="identifier">args</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="identifier">args</span><span class="plain">); \</span>
<span class="functiontext">HTML::open</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">tag</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="SP7"></a><b>&#167;7. </b>Which themselves depend on these routines:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::tag</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">details</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;%s"</span><span class="plain">, </span><span class="identifier">tag</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" %S"</span><span class="plain">, </span><span class="identifier">details</span><span class="plain">);</span>
<span class="reserved">HTML_file_state</span><span class="plain"> *</span><span class="identifier">hs</span><span class="plain"> = </span><span class="functiontext">Streams::get_HTML_file_state</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">hs</span><span class="plain">) &amp;&amp; (</span><span class="identifier">hs</span><span class="plain">-&gt;</span><span class="element">XHTML_flag</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" /"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&gt;"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">HTML::tag_formatting</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">) &gt;= </span><span class="constant">1</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::tag_sc</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">details</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;%s"</span><span class="plain">, </span><span class="identifier">tag</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" %S"</span><span class="plain">, </span><span class="identifier">details</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" /&gt;"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">HTML::tag_formatting</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">) &gt;= </span><span class="constant">1</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">HTML::tag_formatting</span><span class="plain">(</span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">strcmp</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">, </span><span class="string">"meta"</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">strcmp</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">, </span><span class="string">"link"</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">strcmp</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">, </span><span class="string">"hr"</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">strcmp</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">, </span><span class="string">"br"</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">0</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::open</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">details</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">f</span><span class="plain"> = </span><span class="functiontext">HTML::pair_formatting</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">);</span>
<span class="functiontext">HTML::push_tag</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">tag</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;%s"</span><span class="plain">, </span><span class="identifier">tag</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">details</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" %S"</span><span class="plain">, </span><span class="identifier">details</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&gt;"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">f</span><span class="plain"> &gt;= </span><span class="constant">2</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="constant">INDENT</span><span class="plain">; }</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::close</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">f</span><span class="plain"> = </span><span class="functiontext">HTML::pair_formatting</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">f</span><span class="plain"> &gt;= </span><span class="constant">3</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">f</span><span class="plain"> &gt;= </span><span class="constant">2</span><span class="plain">) </span><span class="constant">OUTDENT</span><span class="plain">;</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;/%s&gt;"</span><span class="plain">, </span><span class="identifier">tag</span><span class="plain">);</span>
<span class="functiontext">HTML::pop_tag</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">tag</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">f</span><span class="plain"> &gt;= </span><span class="constant">1</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">HTML::pair_formatting</span><span class="plain">(</span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">strcmp</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">, </span><span class="string">"td"</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">3</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">strcmp</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">, </span><span class="string">"head"</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">strcmp</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">, </span><span class="string">"body"</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">strcmp</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">, </span><span class="string">"div"</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">strcmp</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">, </span><span class="string">"table"</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">strcmp</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">, </span><span class="string">"tr"</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">strcmp</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">, </span><span class="string">"script"</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">strcmp</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">, </span><span class="string">"style"</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">strcmp</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">, </span><span class="string">"html"</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">strcmp</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">, </span><span class="string">"p"</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">strcmp</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">, </span><span class="string">"title"</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">strcmp</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">, </span><span class="string">"blockquote"</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">0</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function HTML::tag is used in <a href="#SP6">&#167;6</a>.</p>
<p class="endnote">The function HTML::tag_sc appears nowhere else.</p>
<p class="endnote">The function HTML::tag_formatting appears nowhere else.</p>
<p class="endnote">The function HTML::open is used in <a href="#SP6">&#167;6</a>, <a href="#SP13">&#167;13</a>.</p>
<p class="endnote">The function HTML::close is used in <a href="#SP6">&#167;6</a>.</p>
<p class="endnote">The function HTML::pair_formatting appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. Head. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::begin_head</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">CSS_file</span><span class="plain">) {</span>
<span class="reserved">HTML_file_state</span><span class="plain"> *</span><span class="identifier">hs</span><span class="plain"> = </span><span class="functiontext">Streams::get_HTML_file_state</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">hs</span><span class="plain">) &amp;&amp; (</span><span class="identifier">hs</span><span class="plain">-&gt;</span><span class="element">XHTML_flag</span><span class="plain">)) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" "</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"&gt;\n"</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"html"</span><span class="plain">, </span><span class="string">"xmlns=\"http://www.w3.org/1999/xhtml\""</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">"&lt;!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" "</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\"http://www.w3.org/TR/html4/loose.dtd\"&gt;\n"</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"html"</span><span class="plain">);</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">HTML_OPEN</span><span class="plain">(</span><span class="string">"head"</span><span class="plain">);</span>
<span class="identifier">HTML_TAG_WITH</span><span class="plain">(</span><span class="string">"meta"</span><span class="plain">, </span><span class="string">"http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\""</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">CSS_file</span><span class="plain">)</span>
<span class="identifier">HTML_TAG_WITH</span><span class="plain">(</span><span class="string">"link"</span><span class="plain">, </span><span class="string">"href=\"%/f\" rel=\"stylesheet\" type=\"text/css\""</span><span class="plain">, </span><span class="identifier">CSS_file</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::end_head</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"head"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function HTML::begin_head is used in 5/ee (<a href="5-ee.html#SP6_3">&#167;6.3</a>).</p>
<p class="endnote">The function HTML::end_head is used in 5/ee (<a href="5-ee.html#SP6_3">&#167;6.3</a>).</p>
<p class="inwebparagraph"><a id="SP9"></a><b>&#167;9. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::title</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">HTML_OPEN</span><span class="plain">(</span><span class="string">"title"</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">title</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"title"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function HTML::title appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP10"></a><b>&#167;10. Scripts and styles. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::open_javascript</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">define_project</span><span class="plain">) {</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"script"</span><span class="plain">, </span><span class="string">"type=\"text/javascript\""</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">define_project</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"function project() {\n"</span><span class="plain">); </span><span class="constant">INDENT</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="constant">WINDOWS_JAVASCRIPT</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"return external.Project;\n"</span><span class="plain">);</span>
<span class="plain">#</span><span class="identifier">endif</span>
<span class="plain">#</span><span class="identifier">ifndef</span><span class="plain"> </span><span class="constant">WINDOWS_JAVASCRIPT</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"return window.Project;\n"</span><span class="plain">);</span>
<span class="plain">#</span><span class="identifier">endif</span>
<span class="constant">OUTDENT</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>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::close_javascript</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"script"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::incorporate_javascript</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">define_project</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">M</span><span class="plain">) {</span>
<span class="functiontext">HTML::open_javascript</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">define_project</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">TextFiles::read</span><span class="plain">(</span><span class="identifier">M</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="functiontext">HTML::incorporate_helper</span><span class="plain">, </span><span class="identifier">NULL</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_TO</span><span class="plain">(</span><span class="constant">STDERR</span><span class="plain">, </span><span class="string">"%f"</span><span class="plain">, </span><span class="identifier">M</span><span class="plain">);</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"Unable to open model JS material for reading"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext">HTML::close_javascript</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="reserved">HTML_file_state</span><span class="plain"> *</span><span class="identifier">hs</span><span class="plain"> = </span><span class="functiontext">Streams::get_HTML_file_state</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">hs</span><span class="plain">) </span><span class="identifier">hs</span><span class="plain">-&gt;</span><span class="element">JS_included</span><span class="plain">++;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::open_CSS</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"style"</span><span class="plain">, </span><span class="string">"type=\"text/css\""</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;!--\n"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::close_CSS</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">"--&gt;\n"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"style"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::incorporate_CSS</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">M</span><span class="plain">) {</span>
<span class="functiontext">HTML::open_CSS</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">TextFiles::read</span><span class="plain">(</span><span class="identifier">M</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="functiontext">HTML::incorporate_helper</span><span class="plain">, </span><span class="identifier">NULL</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">internal_error</span><span class="plain">(</span><span class="string">"Unable to open model CSS material for reading"</span><span class="plain">);</span>
<span class="functiontext">HTML::close_CSS</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="reserved">HTML_file_state</span><span class="plain"> *</span><span class="identifier">hs</span><span class="plain"> = </span><span class="functiontext">Streams::get_HTML_file_state</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">hs</span><span class="plain">) </span><span class="identifier">hs</span><span class="plain">-&gt;</span><span class="element">CSS_included</span><span class="plain">++;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::incorporate_HTML</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">M</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">TextFiles::read</span><span class="plain">(</span><span class="identifier">M</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="functiontext">HTML::incorporate_helper</span><span class="plain">, </span><span class="identifier">NULL</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">internal_error</span><span class="plain">(</span><span class="string">"Unable to open model HTML material for reading"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function HTML::open_javascript appears nowhere else.</p>
<p class="endnote">The function HTML::close_javascript appears nowhere else.</p>
<p class="endnote">The function HTML::incorporate_javascript appears nowhere else.</p>
<p class="endnote">The function HTML::open_CSS appears nowhere else.</p>
<p class="endnote">The function HTML::close_CSS appears nowhere else.</p>
<p class="endnote">The function HTML::incorporate_CSS appears nowhere else.</p>
<p class="endnote">The function HTML::incorporate_HTML appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP11"></a><b>&#167;11. </b>The helper simply performs a textual copy:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::incorporate_helper</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">line_of_template</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">OUT</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S\n"</span><span class="plain">, </span><span class="identifier">line_of_template</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function HTML::incorporate_helper is used in <a href="#SP10">&#167;10</a>.</p>
<p class="inwebparagraph"><a id="SP12"></a><b>&#167;12. Body. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::begin_body</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">class</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">class</span><span class="plain">) </span><span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"body"</span><span class="plain">, </span><span class="string">"class=\"%S\""</span><span class="plain">, </span><span class="identifier">class</span><span class="plain">)</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"body"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::end_body</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"body"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"html"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function HTML::begin_body is used in 5/ee (<a href="5-ee.html#SP6_3">&#167;6.3</a>).</p>
<p class="endnote">The function HTML::end_body is used in 5/ee (<a href="5-ee.html#SP6_3">&#167;6.3</a>).</p>
<p class="inwebparagraph"><a id="SP13"></a><b>&#167;13. Divisions. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::begin_div_with_id</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</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=\"%s\""</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::begin_div_with_class</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">cl</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=\"%s\""</span><span class="plain">, </span><span class="identifier">cl</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::begin_div_with_class_and_id</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">cl</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">id</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">hide</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">hide</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=\"%s\" id=\"%s\" style=\"display: none;\""</span><span class="plain">, </span><span class="identifier">cl</span><span class="plain">, </span><span class="identifier">id</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">"div"</span><span class="plain">, </span><span class="string">"class=\"%s\" id=\"%s\""</span><span class="plain">, </span><span class="identifier">cl</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::begin_div_with_id_S</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">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">"id=\"%S\""</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">);</span>
<span class="functiontext">HTML::open</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"div"</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">HTML::begin_div_with_class_S</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="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=\"%S\""</span><span class="plain">, </span><span class="identifier">cl</span><span class="plain">);</span>
<span class="functiontext">HTML::open</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"div"</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">HTML::begin_div_with_class_and_id_S</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">id</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">hide</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=\"%S\" id=\"%S\""</span><span class="plain">, </span><span class="identifier">cl</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">hide</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">" style=\"display: none;\""</span><span class="plain">);</span>
<span class="functiontext">HTML::open</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"div"</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">HTML::end_div</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</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>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function HTML::begin_div_with_id appears nowhere else.</p>
<p class="endnote">The function HTML::begin_div_with_class appears nowhere else.</p>
<p class="endnote">The function HTML::begin_div_with_class_and_id appears nowhere else.</p>
<p class="endnote">The function HTML::begin_div_with_id_S appears nowhere else.</p>
<p class="endnote">The function HTML::begin_div_with_class_S appears nowhere else.</p>
<p class="endnote">The function HTML::begin_div_with_class_and_id_S appears nowhere else.</p>
<p class="endnote">The function HTML::end_div appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP14"></a><b>&#167;14. Images. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::image</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</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="identifier">HTML_TAG_WITH</span><span class="plain">(</span><span class="string">"img"</span><span class="plain">, </span><span class="string">"src=\"%/f\""</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="endnote">The function HTML::image appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP15"></a><b>&#167;15. Links. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::anchor</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">id</span><span class="plain">) {</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"a"</span><span class="plain">, </span><span class="string">"id=\"%S\""</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"a"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::begin_link</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="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"a"</span><span class="plain">, </span><span class="string">"href=\"%S\""</span><span class="plain">, </span><span class="identifier">to</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::begin_link_with_class</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="functiontext">HTML::begin_link_with_class_onclick</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">NULL</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::begin_link_with_class_title</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="functiontext">HTML::begin_link_with_class_title_onclick</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">NULL</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::begin_link_with_class_onclick</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">on</span><span class="plain">) {</span>
<span class="functiontext">HTML::begin_link_with_class_title_onclick</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">NULL</span><span class="plain">, </span><span class="identifier">on</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::begin_link_with_class_title_onclick</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">on</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;a href=\"%S\" class=\"%S\""</span><span class="plain">, </span><span class="identifier">to</span><span class="plain">, </span><span class="identifier">cl</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">ti</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" title=\"%S\""</span><span class="plain">, </span><span class="identifier">ti</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">on</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" onclick=\"%S\""</span><span class="plain">, </span><span class="identifier">on</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&gt;"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::end_link</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</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="endnote">The function HTML::anchor appears nowhere else.</p>
<p class="endnote">The function HTML::begin_link appears nowhere else.</p>
<p class="endnote">The function HTML::begin_link_with_class appears nowhere else.</p>
<p class="endnote">The function HTML::begin_link_with_class_title appears nowhere else.</p>
<p class="endnote">The function HTML::begin_link_with_class_onclick appears nowhere else.</p>
<p class="endnote">The function HTML::begin_link_with_class_title_onclick appears nowhere else.</p>
<p class="endnote">The function HTML::end_link appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP16"></a><b>&#167;16. Tables. </b>Opening a generic bland table with reasonable column spacing:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::begin_plain_html_table</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="functiontext">HTML::begin_html_table</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="constant">FALSE</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::begin_wide_html_table</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="functiontext">HTML::begin_html_table</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="constant">TRUE</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function HTML::begin_plain_html_table appears nowhere else.</p>
<p class="endnote">The function HTML::begin_wide_html_table appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP17"></a><b>&#167;17. </b>And some more general code:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::begin_html_table</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">colour</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">full_width</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">border</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">cellspacing</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">cellpadding</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">height</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">width</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">tab</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tab</span><span class="plain">, </span><span class="string">"border=\"%d\" cellspacing=\"%d\" cellpadding=\"%d\""</span><span class="plain">,</span>
<span class="identifier">border</span><span class="plain">, </span><span class="identifier">cellspacing</span><span class="plain">, </span><span class="identifier">cellpadding</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">colour</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (*</span><span class="identifier">colour</span><span class="plain"> == </span><span class="character">'*'</span><span class="plain">)</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tab</span><span class="plain">, </span><span class="string">" style=\"background-image:url('inform:/%s');\""</span><span class="plain">, </span><span class="identifier">colour</span><span class="plain">+1);</span>
<span class="reserved">else</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tab</span><span class="plain">, </span><span class="string">" bgcolor=\"%s\""</span><span class="plain">, </span><span class="identifier">colour</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">full_width</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tab</span><span class="plain">, </span><span class="string">" width=100%%"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">width</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tab</span><span class="plain">, </span><span class="string">" width=\"%d\""</span><span class="plain">, </span><span class="identifier">width</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">height</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tab</span><span class="plain">, </span><span class="string">" height=\"%d\""</span><span class="plain">, </span><span class="identifier">height</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"table"</span><span class="plain">, </span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">tab</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">tab</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::begin_html_table_bg</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">colour</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">full_width</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">border</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">cellspacing</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">cellpadding</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">height</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">width</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">bg</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">tab</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tab</span><span class="plain">, </span><span class="string">"border=\"%d\" cellspacing=\"%d\" cellpadding=\"%d\""</span><span class="plain">,</span>
<span class="identifier">border</span><span class="plain">, </span><span class="identifier">cellspacing</span><span class="plain">, </span><span class="identifier">cellpadding</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bg</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tab</span><span class="plain">, </span><span class="string">" background=\"inform:/map_icons/%s\""</span><span class="plain">, </span><span class="identifier">bg</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">colour</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tab</span><span class="plain">, </span><span class="string">" bgcolor=\"%s\""</span><span class="plain">, </span><span class="identifier">colour</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">full_width</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tab</span><span class="plain">, </span><span class="string">" width=100%%"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">width</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tab</span><span class="plain">, </span><span class="string">" width=\"%d\""</span><span class="plain">, </span><span class="identifier">width</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">height</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tab</span><span class="plain">, </span><span class="string">" height=\"%d\""</span><span class="plain">, </span><span class="identifier">height</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"table"</span><span class="plain">, </span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">tab</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">tab</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::first_html_column</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">width</span><span class="plain">) {</span>
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">width</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"align=\"left\" valign=\"top\" width=\"%d\""</span><span class="plain">, </span><span class="identifier">width</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">"td"</span><span class="plain">, </span><span class="string">"align=\"left\" valign=\"top\""</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::first_html_column_nowrap</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">width</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">colour</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">colour</span><span class="plain">) </span><span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">, </span><span class="string">"bgcolor=\"%s\""</span><span class="plain">, </span><span class="identifier">colour</span><span class="plain">) </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">col</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">col</span><span class="plain">, </span><span class="string">"style=\"white-space:nowrap;\" align=\"left\" valign=\"top\" height=\"20\""</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">width</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">col</span><span class="plain">, </span><span class="string">" width=\"%d\""</span><span class="plain">, </span><span class="identifier">width</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">col</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">col</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::first_html_column_spaced</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">width</span><span class="plain">) {</span>
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">col</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">col</span><span class="plain">, </span><span class="string">"style=\"padding-top: 3px;\" align=\"left\" valign=\"top\""</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">width</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">col</span><span class="plain">, </span><span class="string">" width=\"%d\""</span><span class="plain">, </span><span class="identifier">width</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">col</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">col</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::first_html_column_coloured</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">width</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">colour</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">cs</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">colour</span><span class="plain">) </span><span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">, </span><span class="string">"bgcolor=\"%s\""</span><span class="plain">, </span><span class="identifier">colour</span><span class="plain">) </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">col</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">col</span><span class="plain">, </span><span class="string">"nowrap=\"nowrap\" align=\"left\" valign=\"top\""</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">width</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">col</span><span class="plain">, </span><span class="string">" width=\"%d\""</span><span class="plain">, </span><span class="identifier">width</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">cs</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">col</span><span class="plain">, </span><span class="string">" colspan=\"%d\""</span><span class="plain">, </span><span class="identifier">cs</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">col</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">col</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::next_html_column</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">width</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">width</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"align=\"left\" valign=\"top\" width=\"%d\""</span><span class="plain">, </span><span class="identifier">width</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">"td"</span><span class="plain">, </span><span class="string">"align=\"left\" valign=\"top\""</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::next_html_column_centred</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">width</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&amp;nbsp;"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">width</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"align=\"center\" valign=\"top\" width=\"%d\""</span><span class="plain">, </span><span class="identifier">width</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">"td"</span><span class="plain">, </span><span class="string">"align=\"center\" valign=\"top\""</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::next_html_column_spanning</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">width</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">sp</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">width</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"align=\"left\" valign=\"top\" colspan=\"%d\" width=\"%d\""</span><span class="plain">, </span><span class="identifier">sp</span><span class="plain">, </span><span class="identifier">width</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">"td"</span><span class="plain">, </span><span class="string">"align=\"left\" valign=\"top\" colspan=\"%d\""</span><span class="plain">, </span><span class="identifier">sp</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::next_html_column_nowrap</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">width</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&amp;nbsp;"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">width</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"style=\"white-space:nowrap;\" align=\"left\" valign=\"top\" width=\"%d\""</span><span class="plain">, </span><span class="identifier">width</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">"td"</span><span class="plain">, </span><span class="string">"style=\"white-space:nowrap;\" align=\"left\" valign=\"top\""</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::next_html_column_spaced</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">width</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">width</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"style=\"padding-top: 3px;\" align=\"left\" valign=\"top\" width=\"%d\""</span><span class="plain">, </span><span class="identifier">width</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">"td"</span><span class="plain">, </span><span class="string">"style=\"padding-top: 3px;\" align=\"left\" valign=\"top\""</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::next_html_column_nw</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">width</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&amp;nbsp;"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">width</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"nowrap=\"nowrap\" align=\"left\" valign=\"top\" width=\"%d\""</span><span class="plain">, </span><span class="identifier">width</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">"td"</span><span class="plain">, </span><span class="string">"nowrap=\"nowrap\" align=\"left\" valign=\"top\""</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::next_html_column_w</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">width</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&amp;nbsp;"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">width</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"align=\"left\" valign=\"top\" width=\"%d\""</span><span class="plain">, </span><span class="identifier">width</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">"td"</span><span class="plain">, </span><span class="string">"align=\"left\" valign=\"top\""</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::next_html_column_right_justified</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">width</span><span class="plain">) {</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">width</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"align=\"right\" valign=\"top\" width=\"%d\""</span><span class="plain">, </span><span class="identifier">width</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">"td"</span><span class="plain">, </span><span class="string">"align=\"right\" valign=\"top\""</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::end_html_row</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::end_html_table</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"table"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function HTML::begin_html_table is used in <a href="#SP16">&#167;16</a>.</p>
<p class="endnote">The function HTML::begin_html_table_bg appears nowhere else.</p>
<p class="endnote">The function HTML::first_html_column appears nowhere else.</p>
<p class="endnote">The function HTML::first_html_column_nowrap appears nowhere else.</p>
<p class="endnote">The function HTML::first_html_column_spaced appears nowhere else.</p>
<p class="endnote">The function HTML::first_html_column_coloured appears nowhere else.</p>
<p class="endnote">The function HTML::next_html_column appears nowhere else.</p>
<p class="endnote">The function HTML::next_html_column_centred appears nowhere else.</p>
<p class="endnote">The function HTML::next_html_column_spanning appears nowhere else.</p>
<p class="endnote">The function HTML::next_html_column_nowrap appears nowhere else.</p>
<p class="endnote">The function HTML::next_html_column_spaced appears nowhere else.</p>
<p class="endnote">The function HTML::next_html_column_nw appears nowhere else.</p>
<p class="endnote">The function HTML::next_html_column_w appears nowhere else.</p>
<p class="endnote">The function HTML::next_html_column_right_justified appears nowhere else.</p>
<p class="endnote">The function HTML::end_html_row appears nowhere else.</p>
<p class="endnote">The function HTML::end_html_table is used in <a href="#SP18">&#167;18</a>.</p>
<p class="inwebparagraph"><a id="SP18"></a><b>&#167;18. Round-rects. </b></p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="constant">CORNER_SIZE</span><span class="plain"> </span><span class="constant">8</span><span class="plain"> </span><span class="comment"> measured in pixels</span>
<span class="definitionkeyword">define</span> <span class="constant">ROUND_BOX_TOP</span><span class="plain"> </span><span class="constant">1</span>
<span class="definitionkeyword">define</span> <span class="constant">ROUND_BOX_BOTTOM</span><span class="plain"> </span><span class="constant">2</span>
</pre>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::open_coloured_box</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">html_colour</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">rounding</span><span class="plain">) {</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"table"</span><span class="plain">,</span>
<span class="string">"width=\"100%%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" "</span>
<span class="string">"style=\"background-color: #%s\""</span><span class="plain">, </span><span class="identifier">html_colour</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"width=\"%d\""</span><span class="plain">, </span><span class="constant">CORNER_SIZE</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rounding</span><span class="plain"> &amp; </span><span class="constant">ROUND_BOX_TOP</span><span class="plain">) </span><span class="functiontext">HTML::box_corner</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">html_colour</span><span class="plain">, </span><span class="string">"tl"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"width=\"%d\""</span><span class="plain">, </span><span class="constant">CORNER_SIZE</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rounding</span><span class="plain"> &amp; </span><span class="constant">ROUND_BOX_TOP</span><span class="plain">) </span><span class="functiontext">HTML::box_corner</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">html_colour</span><span class="plain">, </span><span class="string">"tr"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"width=\"%d\""</span><span class="plain">, </span><span class="constant">CORNER_SIZE</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::close_coloured_box</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">html_colour</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">rounding</span><span class="plain">) {</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"width=\"%d\""</span><span class="plain">, </span><span class="constant">CORNER_SIZE</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"width=\"%d\""</span><span class="plain">, </span><span class="constant">CORNER_SIZE</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rounding</span><span class="plain"> &amp; </span><span class="constant">ROUND_BOX_BOTTOM</span><span class="plain">) </span><span class="functiontext">HTML::box_corner</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">html_colour</span><span class="plain">, </span><span class="string">"bl"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">, </span><span class="string">"width=\"%d\""</span><span class="plain">, </span><span class="constant">CORNER_SIZE</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rounding</span><span class="plain"> &amp; </span><span class="constant">ROUND_BOX_BOTTOM</span><span class="plain">) </span><span class="functiontext">HTML::box_corner</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">html_colour</span><span class="plain">, </span><span class="string">"br"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"td"</span><span class="plain">);</span>
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"tr"</span><span class="plain">);</span>
<span class="functiontext">HTML::end_html_table</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">HTML::box_corner</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">html_colour</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">corner</span><span class="plain">) {</span>
<span class="identifier">HTML_TAG_WITH</span><span class="plain">(</span><span class="string">"img"</span><span class="plain">,</span>
<span class="string">"src=\"inform:/bg_images/%s_corner_%s.gif\" "</span>
<span class="string">"width=\"%d\" height=\"%d\" border=\"0\" alt=\"...\""</span><span class="plain">,</span>
<span class="identifier">corner</span><span class="plain">, </span><span class="identifier">html_colour</span><span class="plain">, </span><span class="constant">CORNER_SIZE</span><span class="plain">, </span><span class="constant">CORNER_SIZE</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function HTML::open_coloured_box appears nowhere else.</p>
<p class="endnote">The function HTML::close_coloured_box appears nowhere else.</p>
<p class="endnote">The function HTML::box_corner appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP19"></a><b>&#167;19. Miscellaneous. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::comment</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">text</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;!--%S--&gt;\n"</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::heading</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">tag</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="identifier">tag</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="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="identifier">tag</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="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::hr</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">class</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">class</span><span class="plain">) </span><span class="identifier">HTML_TAG_WITH</span><span class="plain">(</span><span class="string">"hr"</span><span class="plain">, </span><span class="string">"class=\"%s\""</span><span class="plain">, </span><span class="identifier">class</span><span class="plain">)</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"hr"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function HTML::comment appears nowhere else.</p>
<p class="endnote">The function HTML::heading appears nowhere else.</p>
<p class="endnote">The function HTML::hr appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP20"></a><b>&#167;20. HTML colours. </b>Inform uses these when constructing the map in the World index.
</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">colour_translation</span><span class="plain"> {</span>
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">chip_name</span><span class="plain">;</span>
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">html_colour</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">colour_translation</span><span class="plain">;</span>
<span class="reserved">colour_translation</span><span class="plain"> </span><span class="identifier">table_of_translations</span><span class="plain">[] = {</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Alice Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"F0F8FF"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Antique White"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FAEBD7"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Aqua"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"00FFFF"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Aquamarine"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"7FFFD4"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Azure"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"F0FFFF"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Beige"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"F5F5DC"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Bisque"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FFE4C4"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Black"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"000000"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Blanched Almond"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FFEBCD"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"0000FF"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Blue Violet"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"8A2BE2"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Brown"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"A52A2A"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Burly Wood"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"DEB887"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Cadet Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"5F9EA0"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Chartreuse"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"7FFF00"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Chocolate"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"D2691E"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Coral"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FF7F50"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Cornflower Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"6495ED"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Cornsilk"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FFF8DC"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Crimson"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"DC143C"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Cyan"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"00FFFF"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Dark Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"00008B"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Dark Cyan"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"008B8B"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Dark Golden Rod"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"B8860B"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Dark Gray"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"A9A9A9"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Dark Green"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"006400"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Dark Khaki"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"BDB76B"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Dark Magenta"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"8B008B"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Dark Olive Green"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"556B2F"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Dark Orange"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FF8C00"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Dark Orchid"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"9932CC"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Dark Red"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"8B0000"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Dark Salmon"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"E9967A"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Dark Sea Green"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"8FBC8F"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Dark Slate Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"483D8B"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Dark Slate Gray"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"2F4F4F"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Dark Turquoise"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"00CED1"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Dark Violet"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"9400D3"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Deep Pink"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FF1493"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Deep Sky Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"00BFFF"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Dim Gray"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"696969"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Dodger Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"1E90FF"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Feldspar"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"D19275"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Fire Brick"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"B22222"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Floral White"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FFFAF0"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Forest Green"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"228B22"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Fuchsia"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FF00FF"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Gainsboro"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"DCDCDC"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Ghost White"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"F8F8FF"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Gold"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FFD700"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Golden Rod"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"DAA520"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Gray"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"808080"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Green"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"008000"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Green Yellow"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"ADFF2F"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Honey Dew"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"F0FFF0"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Hot Pink"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FF69B4"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Indian Red"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"CD5C5C"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Indigo"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"4B0082"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Ivory"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FFFFF0"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Khaki"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"F0E68C"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Lavender"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"E6E6FA"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Lavender Blush"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FFF0F5"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Lawn Green"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"7CFC00"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Lemon Chiffon"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FFFACD"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Light Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"ADD8E6"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Light Coral"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"F08080"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Light Cyan"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"E0FFFF"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Light Golden Rod Yellow"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FAFAD2"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Light Grey"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"D3D3D3"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Light Green"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"90EE90"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Light Pink"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FFB6C1"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Light Salmon"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FFA07A"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Light Sea Green"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"20B2AA"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Light Sky Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"87CEFA"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Light Slate Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"8470FF"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Light Slate Gray"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"778899"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Light Steel Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"B0C4DE"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Light Yellow"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FFFFE0"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Lime"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"00FF00"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Lime Green"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"32CD32"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Linen"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FAF0E6"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Magenta"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FF00FF"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Maroon"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"800000"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Medium Aquamarine"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"66CDAA"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Medium Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"0000CD"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Medium Orchid"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"BA55D3"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Medium Purple"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"9370D8"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Medium Sea Green"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"3CB371"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Medium Slate Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"7B68EE"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Medium Spring Green"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"00FA9A"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Medium Turquoise"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"48D1CC"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Medium Violet Red"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"CA226B"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Midnight Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"191970"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Mint Cream"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"F5FFFA"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Misty Rose"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FFE4E1"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Moccasin"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FFE4B5"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Navajo White"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FFDEAD"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Navy"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"000080"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Old Lace"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FDF5E6"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Olive"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"808000"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Olive Drab"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"6B8E23"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Orange"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FFA500"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Orange Red"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FF4500"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Orchid"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"DA70D6"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Pale Golden Rod"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"EEE8AA"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Pale Green"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"98FB98"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Pale Turquoise"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"AFEEEE"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Pale Violet Red"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"D87093"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Papaya Whip"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FFEFD5"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Peach Puff"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FFDAB9"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Peru"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"CD853F"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Pink"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FFC0CB"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Plum"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"DDA0DD"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Powder Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"B0E0E6"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Purple"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"800080"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Red"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FF0000"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Rosy Brown"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"BC8F8F"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Royal Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"4169E1"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Saddle Brown"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"8B4513"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Salmon"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FA8072"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Sandy Brown"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"F4A460"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Sea Green"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"2E8B57"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Sea Shell"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FFF5EE"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Sienna"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"A0522D"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Silver"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"C0C0C0"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Sky Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"87CEEB"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Slate Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"6A5ACD"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Slate Gray"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"708090"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Snow"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FFFAFA"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Spring Green"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"00FF7F"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Steel Blue"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"4682B4"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Tan"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"D2B48C"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Teal"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"008080"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Thistle"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"D8BFD8"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Tomato"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FF6347"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Turquoise"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"40E0D0"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Violet"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"EE82EE"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Violet Red"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"D02090"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Wheat"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"F5DEB3"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"White"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FFFFFF"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"White Smoke"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"F5F5F5"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Yellow"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"FFFF00"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">"Yellow Green"</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"9ACD32"</span><span class="plain"> },</span>
<span class="plain">{ </span><span class="identifier">L</span><span class="string">""</span><span class="plain">, </span><span class="identifier">L</span><span class="string">""</span><span class="plain"> }</span>
<span class="plain">};</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The structure colour_translation is private to this section.</p>
<p class="inwebparagraph"><a id="SP21"></a><b>&#167;21. </b>The following is used only a handful of times, if at all, and does not
need to run quickly.
</p>
<pre class="display">
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="functiontext">HTML::translate_colour_name</span><span class="plain">(</span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">original</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">j</span><span class="plain">=0; </span><span class="functiontext">Wide::cmp</span><span class="plain">(</span><span class="identifier">table_of_translations</span><span class="plain">[</span><span class="identifier">j</span><span class="plain">].</span><span class="element">chip_name</span><span class="plain">, </span><span class="identifier">L</span><span class="string">""</span><span class="plain">); </span><span class="identifier">j</span><span class="plain">++)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Wide::cmp</span><span class="plain">(</span><span class="identifier">table_of_translations</span><span class="plain">[</span><span class="identifier">j</span><span class="plain">].</span><span class="element">chip_name</span><span class="plain">, </span><span class="identifier">original</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">)</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">table_of_translations</span><span class="plain">[</span><span class="identifier">j</span><span class="plain">].</span><span class="element">html_colour</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function HTML::translate_colour_name appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP22"></a><b>&#167;22. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::begin_colour</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">col</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">"style=\"color:#%S\""</span><span class="plain">, </span><span class="identifier">col</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::end_colour</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</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>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function HTML::begin_colour appears nowhere else.</p>
<p class="endnote">The function HTML::end_colour appears nowhere else.</p>
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 5: Generating Websites.)</i></li><li><a href="5-ee.html">Continue with 'Epub Ebooks'</a></li></ul><hr class="tocbar">
<!--End of weave-->
</main>
</body>
</html>