inweb-bootstrap/docs/inweb/2-lc.html
2022-04-04 00:00:46 +01:00

231 lines
43 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Line Categories</title>
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<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="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
<nav role="navigation">
<h1><a href="../index.html">
<img src="../docs-assets/Octagram.png" width=72 height=72">
</a></h1>
<ul><li><a href="index.html"><span class="selectedlink">inweb</span></a></li>
</ul><h2>Foundation Module</h2><ul>
<li><a href="../foundation-module/index.html">foundation</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul><h2>Example Webs</h2><ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
<li><a href="../eastertide/index.html">eastertide</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inweb"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>
<li><a href="../../../inform/docs/index.html">inform</a></li>
<li><a href="../../../intest/docs/index.html">intest</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'Line Categories' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#2">Chapter 2: Parsing a Web</a></li><li><b>Line Categories</b></li></ul></div>
<p class="purpose">To store individual lines from webs, and to categorise them according to their meaning.</p>
<ul class="toc"><li><a href="2-lc.html#SP1">&#167;1. Line storage</a></li><li><a href="2-lc.html#SP3">&#167;3. Categories</a></li><li><a href="2-lc.html#SP5">&#167;5. Command codes</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Line storage. </b>In the next section, we'll read in an entire web, building its hierarchical
structure of chapters, sections and eventually paragraphs. But before we do
that, we'll define the structure used to store a single line of the web.
</p>
<p class="commentary">Because Inweb markup makes use of the special characters <span class="extract"><span class="extract-syntax">@</span></span> and <span class="extract"><span class="extract-syntax">=</span></span> as
dividers, but only in column 1, the important divisions between material
all effectively occur at line boundaries &mdash; this is a major point of
difference with, for example, CWEB, for which the source is just a stream
of characters in which all white space is equivalent. Because Inweb source
is so tidily divisible into lines, we can usefully make each source line
correspond to one of these:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">source_line</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">; </span><span class="comment-syntax"> the text as read in</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text_operand</span><span class="plain-syntax">; </span><span class="comment-syntax"> meaning depends on category</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text_operand2</span><span class="plain-syntax">; </span><span class="comment-syntax"> meaning depends on category</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">category</span><span class="plain-syntax">; </span><span class="comment-syntax"> what sort of line this is: an </span><span class="extract"><span class="extract-syntax">*_LCAT</span></span><span class="comment-syntax"> value</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">command_code</span><span class="plain-syntax">; </span><span class="comment-syntax"> used only for </span><span class="extract"><span class="extract-syntax">COMMAND_LCAT</span></span><span class="comment-syntax"> lines: a </span><span class="extract"><span class="extract-syntax">*_CMD</span></span><span class="comment-syntax"> value</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">default_defn</span><span class="plain-syntax">; </span><span class="comment-syntax"> used only for </span><span class="extract"><span class="extract-syntax">BEGIN_DEFINITION_LCAT</span></span><span class="comment-syntax"> lines</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plainer</span><span class="plain-syntax">; </span><span class="comment-syntax"> used only for </span><span class="extract"><span class="extract-syntax">BEGIN_CODE_LCAT</span></span><span class="comment-syntax"> lines: suppresses box</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">enable_hyperlinks</span><span class="plain-syntax">; </span><span class="comment-syntax"> used only for </span><span class="extract"><span class="extract-syntax">CODE_BODY_LCAT</span></span><span class="comment-syntax"> lines: link URLs in weave</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">programming_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">colour_as</span><span class="plain-syntax">; </span><span class="comment-syntax"> used only for </span><span class="extract"><span class="extract-syntax">TEXT_EXTRACT_LCAT</span></span><span class="comment-syntax"> lines</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">extract_to</span><span class="plain-syntax">; </span><span class="comment-syntax"> used only for </span><span class="extract"><span class="extract-syntax">TEXT_EXTRACT_LCAT</span></span><span class="comment-syntax"> lines</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">is_commentary</span><span class="plain-syntax">; </span><span class="comment-syntax"> flag</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">language_function</span><span class="plain-syntax"> *</span><span class="identifier-syntax">function_defined</span><span class="plain-syntax">; </span><span class="comment-syntax"> if any C-like function is defined on this line</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">preform_nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">preform_nonterminal_defined</span><span class="plain-syntax">; </span><span class="comment-syntax"> similarly</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">suppress_tangling</span><span class="plain-syntax">; </span><span class="comment-syntax"> if e.g., lines are tangled out of order</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">interface_line_identified</span><span class="plain-syntax">; </span><span class="comment-syntax"> only relevant during parsing of Interface lines</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">footnote</span><span class="plain-syntax"> *</span><span class="identifier-syntax">footnote_text</span><span class="plain-syntax">; </span><span class="comment-syntax"> which fn this is the text of, if it is at all</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">text_file_position</span><span class="plain-syntax"> </span><span class="identifier-syntax">source</span><span class="plain-syntax">; </span><span class="comment-syntax"> which file this was read in from, if any</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">section</span><span class="plain-syntax"> *</span><span class="identifier-syntax">owning_section</span><span class="plain-syntax">; </span><span class="comment-syntax"> for interleaved title lines, it's the one about to start</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">source_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">next_line</span><span class="plain-syntax">; </span><span class="comment-syntax"> within the owning section's linked list</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">paragraph</span><span class="plain-syntax"> *</span><span class="identifier-syntax">owning_paragraph</span><span class="plain-syntax">; </span><span class="comment-syntax"> for lines falling under paragraphs; </span><span class="extract"><span class="extract-syntax">NULL</span></span><span class="comment-syntax"> if not</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">source_line</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure source_line is accessed in 1/pc, 2/tr, 2/tp, 2/pm, 2/ec, 2/pn, 3/ta, 3/tw, 3/twot, 3/tt, 4/taf, 4/lm, 4/as, 4/cl, 4/is, 5/wt, 5/ptf, 5/tf, 5/hf, 5/df, 6/cs, 6/cln and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">source_line</span><span class="plain-syntax"> *</span><span class="function-syntax">Lines::new_source_line_in</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Lines::new_source_line_in</span></span>:<br/>The Reader - <a href="2-tr.html#SP6_1_2">&#167;6.1.2</a><br/>The Parser - <a href="2-tp.html#SP1_1_6_1">&#167;1.1.6.1</a>, <a href="2-tp.html#SP1_1_7_7_2">&#167;1.1.7.7.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">section</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">source_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">source_line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">text</span><span class="plain-syntax"> = </span><a href="../foundation-module/4-sm.html#SP3" class="function-link"><span class="function-syntax">Str::duplicate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">text_operand</span><span class="plain-syntax"> = </span><a href="../foundation-module/4-sm.html#SP2" class="function-link"><span class="function-syntax">Str::new</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">text_operand2</span><span class="plain-syntax"> = </span><a href="../foundation-module/4-sm.html#SP2" class="function-link"><span class="function-syntax">Str::new</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">category</span><span class="plain-syntax"> = </span><span class="constant-syntax">NO_LCAT</span><span class="plain-syntax">; </span><span class="comment-syntax"> that is, unknown category as yet</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">command_code</span><span class="plain-syntax"> = </span><span class="constant-syntax">NO_CMD</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">default_defn</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">plainer</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">enable_hyperlinks</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">colour_as</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">extract_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">is_commentary</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">function_defined</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">preform_nonterminal_defined</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">suppress_tangling</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">interface_line_identified</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">footnote_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">source</span><span class="plain-syntax"> = *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">; </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">source</span><span class="plain-syntax"> = </span><a href="../foundation-module/4-tf.html#SP4" class="function-link"><span class="function-syntax">TextFiles::nowhere</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_section</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_section</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">sect_extent</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_section</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_chapter</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_web</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">web_extent</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_line</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_paragraph</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">sl</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. Categories. </b>The line categories are enumerated as follows. We briefly note what the text
operands (TO and TO2) are set to, if anything: most of the time they're blank.
Note that a few of these categories are needed only for the more cumbersome
version 1 syntax; version 2 removed the need for <span class="extract"><span class="extract-syntax">BAR_LCAT</span></span>,
<span class="extract"><span class="extract-syntax">INTERFACE_BODY_LCAT</span></span>, and <span class="extract"><span class="extract-syntax">INTERFACE_LCAT</span></span>.
</p>
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">NO_LCAT</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax"> </span><span class="comment-syntax"> (used when none has been set as yet)</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">BAR_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> a bar line </span><span class="extract"><span class="extract-syntax">@---------------</span></span><span class="comment-syntax">...</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">BEGIN_CODE_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> an </span><span class="extract"><span class="extract-syntax">@c</span></span><span class="comment-syntax">, </span><span class="extract"><span class="extract-syntax">@e</span></span><span class="comment-syntax"> or </span><span class="extract"><span class="extract-syntax">@x</span></span><span class="comment-syntax"> line below which is code, early code or extract</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">BEGIN_DEFINITION_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> an </span><span class="extract"><span class="extract-syntax">@d</span></span><span class="comment-syntax"> definition: TO is term, TO2 is this line's part of defn</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">C_LIBRARY_INCLUDE_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> C-like languages only: a </span><span class="extract"><span class="extract-syntax">#include</span></span><span class="comment-syntax"> for an ANSI C header file</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">CHAPTER_HEADING_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> chapter heading line inserted automatically, not read from web</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">CODE_BODY_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> the rest of the paragraph under an </span><span class="extract"><span class="extract-syntax">@c</span></span><span class="comment-syntax"> or </span><span class="extract"><span class="extract-syntax">@e</span></span><span class="comment-syntax"> or macro definition</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">COMMAND_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> a </span><span class="extract"><span class="extract-syntax">[[Command]]</span></span><span class="comment-syntax"> line, with the operand set to the </span><span class="extract"><span class="extract-syntax">*_CMD</span></span><span class="comment-syntax"> value</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">COMMENT_BODY_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> text following a paragraph header, which is all comment</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">CONT_DEFINITION_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> subsequent lines of an </span><span class="extract"><span class="extract-syntax">@d</span></span><span class="comment-syntax"> definition</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">DEFINITIONS_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> line holding the </span><span class="extract"><span class="extract-syntax">@Definitions:</span></span><span class="comment-syntax"> heading</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">END_EXTRACT_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> an </span><span class="extract"><span class="extract-syntax">=</span></span><span class="comment-syntax"> line used to mark the end of an extract</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">FOOTNOTE_TEXT_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> the opening of the text of a footnote</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">HEADING_START_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">@h</span></span><span class="comment-syntax"> paragraph start: TO is title, TO2 is rest of line</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">INTERFACE_BODY_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> line within the interface, under this heading</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">INTERFACE_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> line holding the </span><span class="extract"><span class="extract-syntax">@Interface:</span></span><span class="comment-syntax"> heading</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">MACRO_DEFINITION_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> line on which a paragraph macro is defined with an </span><span class="extract"><span class="extract-syntax">=</span></span><span class="comment-syntax"> sign</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">PARAGRAPH_START_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> simple </span><span class="extract"><span class="extract-syntax">@</span></span><span class="comment-syntax"> paragraph start: TO is blank, TO2 is rest of line</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">PREFORM_GRAMMAR_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> InC only: line of Preform grammar</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">PREFORM_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> InC only: opening line of a Preform nonterminal</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">PURPOSE_BODY_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> continuation lines of purpose declaration</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">PURPOSE_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> first line of purpose declaration; TO is rest of line</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">SECTION_HEADING_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> section heading line, at top of file</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">SOURCE_DISPLAY_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> commentary line beginning </span><span class="extract"><span class="extract-syntax">&gt;&gt;</span></span><span class="comment-syntax"> for display: TO is display text</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">TEXT_EXTRACT_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> the rest of the paragraph under an </span><span class="extract"><span class="extract-syntax">@x</span></span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">TYPEDEF_LCAT</span><span class="plain-syntax"> </span><span class="comment-syntax"> C-like languages only: a </span><span class="extract"><span class="extract-syntax">typedef</span></span><span class="comment-syntax"> which isn't a structure definition</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>We want to print these out nicely for the sake of a <span class="extract"><span class="extract-syntax">-scan</span></span> analysis run
of Inweb:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="function-syntax">Lines::category_name</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Lines::category_name</span></span>:<br/>The Analyser - <a href="3-ta.html#SP1_1">&#167;1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cat</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cat</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NO_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"(uncategorised)"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">BAR_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"BAR"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">BEGIN_CODE_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"BEGIN_CODE"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">BEGIN_DEFINITION_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"BEGIN_DEFINITION"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">C_LIBRARY_INCLUDE_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"C_LIBRARY_INCLUDE"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CHAPTER_HEADING_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"CHAPTER_HEADING"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CODE_BODY_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"CODE_BODY"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">COMMAND_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"COMMAND"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">COMMENT_BODY_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"COMMENT_BODY"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONT_DEFINITION_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"CONT_DEFINITION"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">DEFINITIONS_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"DEFINITIONS"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">END_EXTRACT_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"END_EXTRACT"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">FOOTNOTE_TEXT_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"FOOTNOTE_TEXT"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">HEADING_START_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"HEADING_START"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">INTERFACE_BODY_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"INTERFACE_BODY"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">INTERFACE_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"INTERFACE"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MACRO_DEFINITION_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"MACRO_DEFINITION"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PARAGRAPH_START_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"PARAGRAPH_START"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PREFORM_GRAMMAR_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"PREFORM_GRAMMAR"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PREFORM_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"PREFORM"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PURPOSE_BODY_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"PURPOSE_BODY"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PURPOSE_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"PURPOSE"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SECTION_HEADING_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"SECTION_HEADING"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SOURCE_DISPLAY_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"SOURCE_DISPLAY"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TEXT_EXTRACT_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"TEXT_EXTRACT"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TYPEDEF_LCAT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"TYPEDEF"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"(?unknown)"</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. Command codes. </b>Command-category lines are further divided up into the following. Again,
some of these fell into disuse in version 2 syntax.
</p>
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">NO_CMD</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">PAGEBREAK_CMD</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">GRAMMAR_INDEX_CMD</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">FIGURE_CMD</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">AUDIO_CMD</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">VIDEO_CMD</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">DOWNLOAD_CMD</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">CAROUSEL_CMD</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">CAROUSEL_ABOVE_CMD</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">CAROUSEL_BELOW_CMD</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">CAROUSEL_UNCAPTIONED_CMD</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">CAROUSEL_END_CMD</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">EMBED_CMD</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">TAG_CMD</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">HTML_CMD</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-tr.html">&#10094;</a></li><li class="progresschapter"><a href="M-iti.html">M</a></li><li class="progresschapter"><a href="P-htpw.html">P</a></li><li class="progresschapter"><a href="1-bsc.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-tr.html">tr</a></li><li class="progresscurrent">lc</li><li class="progresssection"><a href="2-tp.html">tp</a></li><li class="progresssection"><a href="2-pm.html">pm</a></li><li class="progresssection"><a href="2-tgs.html">tgs</a></li><li class="progresssection"><a href="2-ec.html">ec</a></li><li class="progresssection"><a href="2-pn.html">pn</a></li><li class="progresschapter"><a href="3-ta.html">3</a></li><li class="progresschapter"><a href="4-pl.html">4</a></li><li class="progresschapter"><a href="5-wt.html">5</a></li><li class="progresschapter"><a href="6-mkf.html">6</a></li><li class="progressnext"><a href="2-tp.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>
</body>
</html>