inweb-bootstrap/docs/inweb/5-fm.html

1071 lines
151 KiB
HTML
Raw Normal View History

2019-02-04 22:26:45 +00:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
2020-04-09 17:32:37 +00:00
<title>Format Methods</title>
<meta name="viewport" content="width=device-width initial-scale=1">
2019-02-04 22:26:45 +00:00
<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">
2020-04-10 20:29:28 +00:00
2019-02-04 22:26:45 +00:00
</head>
<body>
<nav role="navigation">
2020-04-13 16:06:45 +00:00
<h1><a href="../index.html">
<img src="../..//docs/docs-src/Figures/Octagram184x184.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>
2020-04-13 16:06:45 +00:00
</ul><h2>Example Webs</h2><ul>
2020-04-12 16:24:23 +00:00
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
2020-04-13 16:06:45 +00:00
</ul><h2>External</h2><ul>
<li><a href="https://github.com/ganelson/inweb">github</a></li>
2020-04-13 16:06:45 +00:00
</ul>
</nav>
<main role="main">
2020-04-09 17:32:37 +00:00
<!--Weave of 'Format Methods' generated by 7-->
2020-04-13 16:06:45 +00:00
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#5">Chapter 5: Formats</a></li><li><b>Format Methods</b></li></ul><p class="purpose">To characterise the relevant differences in behaviour between the various weaving formats offered, such as HTML, ePub, or TeX.</p>
2019-02-04 22:26:45 +00:00
2020-04-12 16:24:23 +00:00
<ul class="toc"><li><a href="#SP1">&#167;1. Formats</a></li><li><a href="#SP3">&#167;3. Creation</a></li><li><a href="#SP4">&#167;4. Methods</a></li><li><a href="#SP33">&#167;33. Post-processing</a></li></ul><hr class="tocbar">
2019-02-04 22:26:45 +00:00
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Formats. </b>Exactly as in the previous chapter, each format expresses its behaviour
through optional method calls.
</p>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">weave_format</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">format_name</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">woven_extension</span><span class="plain">;</span>
<span class="constant">METHOD_CALLS</span>
<span class="constant">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">weave_format</span><span class="plain">;</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="functiontext">Formats::create_weave_format<button class="popup" onclick="togglePopup('usagePopup210')">...<span class="popuptext" id="usagePopup210">Usage of <b>Formats::create_weave_format</b>:<br>Plain Text Format - <a href="5-ptf.html#SP1">&#167;1</a><br>TeX Format - <a href="5-tf.html#SP1_1">&#167;1.1</a>, <a href="5-tf.html#SP1_2">&#167;1.2</a>, <a href="5-tf.html#SP1_3">&#167;1.3</a><br>HTML Formats - <a href="5-hf.html#SP1_1">&#167;1.1</a>, <a href="5-hf.html#SP1_2">&#167;1.2</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">ext</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">weave_format</span><span class="plain">);</span>
<span class="identifier">wf</span><span class="plain">-&gt;</span><span class="element">format_name</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
<span class="identifier">wf</span><span class="plain">-&gt;</span><span class="element">woven_extension</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">ext</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="identifier">ENABLE_METHOD_CALLS</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">);</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">wf</span><span class="plain">;</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="functiontext">Formats::find_by_name<button class="popup" onclick="togglePopup('usagePopup211')">...<span class="popuptext" id="usagePopup211">Usage of <b>Formats::find_by_name</b>:<br><a href="#SP35">&#167;35</a>, Patterns - <a href="1-ptt.html#SP3_2">&#167;3.2</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::eq_insensitive</a></span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">wf</span><span class="plain">-&gt;</span><span class="element">format_name</span><span class="plain">))</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">wf</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The structure weave_format is accessed in 3/ts and here.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b>Note that this is the file extension before any post-processing. For
example, PDFs are made by weaving a TeX file and then running this through
<code class="display"><span class="extract">pdftex</span></code>. The extension here will be <code class="display"><span class="extract">.tex</span></code> because that's what the weave
stage produces, even though we will later end up with a <code class="display"><span class="extract">.pdf</span></code>.
</p>
<pre class="display">
2020-04-13 22:30:42 +00:00
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="functiontext">Formats::file_extension<button class="popup" onclick="togglePopup('usagePopup212')">...<span class="popuptext" id="usagePopup212">Usage of <b>Formats::file_extension</b>:<br>The Swarm - <a href="3-ts.html#SP2_2_1">&#167;2.2.1</a><br>The Indexer - <a href="3-ti.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">wf</span><span class="plain">-&gt;</span><span class="identifier">woven_extension</span><span class="plain">;</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. Creation. </b>This must be performed very early in Inweb's run.
</p>
<pre class="display">
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::create_weave_formats<button class="popup" onclick="togglePopup('usagePopup213')">...<span class="popuptext" id="usagePopup213">Usage of <b>Formats::create_weave_formats</b>:<br>Program Control - <a href="1-pc.html#SP6_1">&#167;6.1</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="functiontext"><a href="5-tf.html#SP1">TeX::create</a></span><span class="plain">();</span>
<span class="functiontext"><a href="5-ptf.html#SP1">PlainText::create</a></span><span class="plain">();</span>
<span class="functiontext"><a href="5-hf.html#SP1">HTMLFormat::create</a></span><span class="plain">();</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. Methods. </b>These two don't allow output to be produced: they're for any setting up and
putting away that needs tp be done.
</p>
<p class="inwebparagraph"><code class="display"><span class="extract">BEGIN_WEAVING_FOR_MTID</span></code> is called before any output is generated, indeed,
before even the filename(s) for the output are worked out. Note that it
can return a <code class="display"><span class="extract">*_SWM</span></code> code to change the swarm behaviour of the weave to come;
this is helpful for EPUB weaving.
</p>
<p class="inwebparagraph">More simply, <code class="display"><span class="extract">END_WEAVING_FOR_MTID</span></code> is called when all weaving is done.
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">BEGIN_WEAVING_FOR_MTID</span>
<span class="definitionkeyword">enum</span> <span class="constant">END_WEAVING_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">BEGIN_WEAVING_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">)</span>
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">END_WEAVING_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Formats::begin_weaving<button class="popup" onclick="togglePopup('usagePopup214')">...<span class="popuptext" id="usagePopup214">Usage of <b>Formats::begin_weaving</b>:<br>Program Control - <a href="1-pc.html#SP7_4_3">&#167;7.4.3</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">IMETHOD_CALL</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">pattern</span><span class="plain">-&gt;</span><span class="element">pattern_format</span><span class="plain">, </span><span class="constant">BEGIN_WEAVING_FOR_MTID</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">pattern</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rv</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">SWARM_OFF_SWM</span><span class="plain">;</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::end_weaving<button class="popup" onclick="togglePopup('usagePopup215')">...<span class="popuptext" id="usagePopup215">Usage of <b>Formats::end_weaving</b>:<br>Program Control - <a href="1-pc.html#SP7_4_3">&#167;7.4.3</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">pattern</span><span class="plain">-&gt;</span><span class="element">pattern_format</span><span class="plain">, </span><span class="constant">END_WEAVING_FOR_MTID</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">pattern</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. </b>Now the weave output, roughly in order from top to bottom.
</p>
<p class="inwebparagraph"><code class="display"><span class="extract">TOP_FOR_MTID</span></code> has the opportunity to put a header at the top of the woven
file. The <code class="display"><span class="extract">comment</span></code> will be anodyne text such as "Weave of... generated at...",
which isn't intended to be read by human eyes, and might become e.g. an
HTML comment.
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">TOP_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">TOP_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">comment</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::top<button class="popup" onclick="togglePopup('usagePopup216')">...<span class="popuptext" id="usagePopup216">Usage of <b>Formats::top</b>:<br>The Weaver - <a href="3-tw.html#SP1_1">&#167;1.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">comment</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">TOP_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">comment</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. </b>The <code class="display"><span class="extract">TOC_FOR_MTID</span></code> method should weave a table of contents at the top of a section.
It is called with four possible values of <code class="display"><span class="extract">stage</span></code>:
</p>
<p class="inwebparagraph"></p>
<ul class="items"><li>(a) 1 for the introductory text, which is in <code class="display"><span class="extract">text1</span></code>;
</li><li>(b) 2 for a division between contents items;
</li><li>(c) 3 for a contents item, with paragraph number <code class="display"><span class="extract">text1</span></code> and heading <code class="display"><span class="extract">text2</span></code>;
</li><li>(d) 4 for any concluding text, such as a full stop, or skipped line.
</li></ul>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">TOC_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">TOC_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">stage</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text1</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text2</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::toc<button class="popup" onclick="togglePopup('usagePopup217')">...<span class="popuptext" id="usagePopup217">Usage of <b>Formats::toc</b>:<br>The Weaver - <a href="3-tw.html#SP4">&#167;4</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">stage</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text1</span><span class="plain">,</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text2</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">TOC_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">stage</span><span class="plain">, </span><span class="identifier">text1</span><span class="plain">, </span><span class="identifier">text2</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. </b>When whole chapters are wovem, or all-in-one weaves include multiple
chapters, the format can add a table of chapter contents, or some similar
interstitial material. This is how:
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">CHAPTER_TP_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">CHAPTER_TP_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::chapter_title_page<button class="popup" onclick="togglePopup('usagePopup218')">...<span class="popuptext" id="usagePopup218">Usage of <b>Formats::chapter_title_page</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_10">&#167;1.3.4.1.10</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">CHAPTER_TP_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. </b>The <code class="display"><span class="extract">SUBHEADING_FOR_MTID</span></code> method is expected to produce subheadings of
two levels of importance, where <code class="display"><span class="extract">level</span></code> is
</p>
<p class="inwebparagraph"></p>
<ul class="items"><li>(a) 1 for extract subheadings used in themed weaves, or
</li><li>(b) 2 for minor headings such as the "Purpose" at the top of a section,
or (for old webs which still have them) "Definitions" headings.
</li></ul>
<p class="inwebparagraph">Note that paragraph headings (the result of <code class="display"><span class="extract">@h</span></code>) do not fall under this
method. The <code class="display"><span class="extract">heading</span></code> is the text for it; the <code class="display"><span class="extract">addendum</span></code> if not <code class="display"><span class="extract">NULL</span></code> is
some supplementary text, used in some cases for running heads.
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">SUBHEADING_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">SUBHEADING_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">level</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">heading</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">addendum</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::subheading<button class="popup" onclick="togglePopup('usagePopup219')">...<span class="popuptext" id="usagePopup219">Usage of <b>Formats::subheading</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_3">&#167;1.3.4.1.3</a>, <a href="3-tw.html#SP1_3_4_1_6">&#167;1.3.4.1.6</a>, <a href="3-tw.html#SP1_3_4_1_10_3_1">&#167;1.3.4.1.10.3.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">level</span><span class="plain">,</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">heading</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">addendum</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">SUBHEADING_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">level</span><span class="plain">, </span><span class="identifier">heading</span><span class="plain">, </span><span class="identifier">addendum</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP9"></a><b>&#167;9. </b>And now we do paragraph headings. This method has rather a lot of
arguments, but for most formats, some can be ignored. In particular
<code class="display"><span class="extract">TeX_macro</span></code>, <code class="display"><span class="extract">chaptermark</span></code>, and <code class="display"><span class="extract">sectionmark</span></code> have been precalculated for
the benefit of the TeX format, and all other formats can leave them be.
</p>
<p class="inwebparagraph"><code class="display"><span class="extract">weight</span></code> is more significant, and is
</p>
<p class="inwebparagraph"></p>
<ul class="items"><li>(a) 1 for a <code class="display"><span class="extract">@h</span></code> paragraph heading,
</li><li>(b) 2 for a section heading,
</li><li>(c) 3 for a chapter heading.
</li></ul>
<p class="inwebparagraph">In each case, the text of the heading is (unsurprisingly) in <code class="display"><span class="extract">heading_text</span></code>.
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">PARAGRAPH_HEADING_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">PARAGRAPH_HEADING_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">TeX_macro</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">heading_text</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">chaptermark</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">sectionmark</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">weight</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::paragraph_heading<button class="popup" onclick="togglePopup('usagePopup220')">...<span class="popuptext" id="usagePopup220">Usage of <b>Formats::paragraph_heading</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_10">&#167;1.3.4.1.10</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">TeX_macro</span><span class="plain">,</span>
2020-04-09 17:32:37 +00:00
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">heading_text</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">chaptermark</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">sectionmark</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">weight</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
2020-04-09 17:32:37 +00:00
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">PARAGRAPH_HEADING_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">TeX_macro</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">,</span>
<span class="identifier">heading_text</span><span class="plain">, </span><span class="identifier">chaptermark</span><span class="plain">, </span><span class="identifier">sectionmark</span><span class="plain">, </span><span class="identifier">weight</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP10"></a><b>&#167;10. </b>The following method is expected to weave a piece of code, which has already
been syntax-coloured; there can also be some indentation, and perhaps even some
<code class="display"><span class="extract">prefatory</span></code> text before the line of code, and also potentially a
<code class="display"><span class="extract">concluding_comment</span></code> at the end of the line.
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">SOURCE_CODE_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">SOURCE_CODE_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">tab_stops_of_indentation</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">prefatory</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">colouring</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">concluding_comment</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">starts</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">finishes</span><span class="plain">,</span>
2020-04-09 13:00:28 +00:00
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">code_mode</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">linked</span><span class="plain">)</span>
2020-04-06 11:26:10 +00:00
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::source_code<button class="popup" onclick="togglePopup('usagePopup221')">...<span class="popuptext" id="usagePopup221">Usage of <b>Formats::source_code</b>:<br><a href="#SP11">&#167;11</a>, The Weaver - <a href="3-tw.html#SP1_3_4_1_8_4">&#167;1.3.4.1.8.4</a>, <a href="3-tw.html#SP1_3_4_1_9">&#167;1.3.4.1.9</a>, <a href="3-tw.html#SP1_3_4_1_9_6">&#167;1.3.4.1.9.6</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">tab_stops_of_indentation</span><span class="plain">,</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">prefatory</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">colouring</span><span class="plain">,</span>
2020-04-09 13:00:28 +00:00
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">concluding_comment</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">starts</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">finishes</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">code_mode</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">linked</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">SOURCE_CODE_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">tab_stops_of_indentation</span><span class="plain">,</span>
2020-04-09 13:00:28 +00:00
<span class="identifier">prefatory</span><span class="plain">, </span><span class="identifier">matter</span><span class="plain">, </span><span class="identifier">colouring</span><span class="plain">, </span><span class="identifier">concluding_comment</span><span class="plain">, </span><span class="identifier">starts</span><span class="plain">, </span><span class="identifier">finishes</span><span class="plain">, </span><span class="identifier">code_mode</span><span class="plain">, </span><span class="identifier">linked</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP11"></a><b>&#167;11. </b>More primitively, this method weaves a piece of code which has been coloured
drably in a uniform <code class="display"><span class="extract">EXTRACT_COLOUR</span></code> colour. This is used for weaving words like
<code class="display"><span class="extract">these_ones</span></code> of code given inside commentary.
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">INLINE_CODE_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">INLINE_CODE_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">pre</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::source_fragment<button class="popup" onclick="togglePopup('usagePopup222')">...<span class="popuptext" id="usagePopup222">Usage of <b>Formats::source_fragment</b>:<br><a href="#SP27">&#167;27</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">fragment</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">INLINE_CODE_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">colouring</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt; </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">fragment</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">colouring</span><span class="plain">, </span><span class="constant">EXTRACT_COLOUR</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP10">Formats::source_code</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">I</span><span class="string">""</span><span class="plain">, </span><span class="identifier">fragment</span><span class="plain">, </span><span class="identifier">colouring</span><span class="plain">, </span><span class="identifier">I</span><span class="string">""</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">colouring</span><span class="plain">);</span>
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">INLINE_CODE_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-09 13:00:28 +00:00
<p class="inwebparagraph"><a id="SP12"></a><b>&#167;12. </b>And this weaves a URL, hyperlinking it where possible.
</p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">URL_FOR_MTID</span>
</pre>
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">URL_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">url</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">content</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">external</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::url<button class="popup" onclick="togglePopup('usagePopup223')">...<span class="popuptext" id="usagePopup223">Usage of <b>Formats::url</b>:<br><a href="#SP27_2">&#167;27.2</a>, <a href="#SP27_4_1">&#167;27.4.1</a>, HTML Formats - <a href="5-hf.html#SP9_1">&#167;9.1</a>, <a href="5-hf.html#SP9_2_1">&#167;9.2.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">url</span><span class="plain">,</span>
2020-04-09 13:00:28 +00:00
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">content</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">external</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="2-mth.html#SP6">Methods::provided</a></span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">URL_FOR_MTID</span><span class="plain">)) {</span>
2020-04-09 13:00:28 +00:00
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">URL_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">url</span><span class="plain">, </span><span class="identifier">content</span><span class="plain">, </span><span class="identifier">external</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">"%S"</span><span class="plain">, </span><span class="identifier">content</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-11 12:08:53 +00:00
<p class="inwebparagraph"><a id="SP13"></a><b>&#167;13. </b>And this weaves a footnote cue.
</p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">FOOTNOTE_CUE_FOR_MTID</span>
</pre>
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">FOOTNOTE_CUE_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">cue</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::footnote_cue<button class="popup" onclick="togglePopup('usagePopup224')">...<span class="popuptext" id="usagePopup224">Usage of <b>Formats::footnote_cue</b>:<br><a href="#SP27_3">&#167;27.3</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">cue</span><span class="plain">) {</span>
2020-04-11 12:08:53 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="2-mth.html#SP6">Methods::provided</a></span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">FOOTNOTE_CUE_FOR_MTID</span><span class="plain">)) {</span>
2020-04-11 12:08:53 +00:00
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">FOOTNOTE_CUE_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">cue</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">"[%S]"</span><span class="plain">, </span><span class="identifier">cue</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP14"></a><b>&#167;14. </b>And this weaves a footnote text opening...
</p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">BEGIN_FOOTNOTE_TEXT_FOR_MTID</span>
</pre>
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">BEGIN_FOOTNOTE_TEXT_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">cue</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::begin_footnote_text<button class="popup" onclick="togglePopup('usagePopup225')">...<span class="popuptext" id="usagePopup225">Usage of <b>Formats::begin_footnote_text</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_8_5">&#167;1.3.4.1.8.5</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">cue</span><span class="plain">) {</span>
2020-04-11 12:08:53 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="2-mth.html#SP6">Methods::provided</a></span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">BEGIN_FOOTNOTE_TEXT_FOR_MTID</span><span class="plain">)) {</span>
2020-04-11 12:08:53 +00:00
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">BEGIN_FOOTNOTE_TEXT_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">cue</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">"[%S]. "</span><span class="plain">, </span><span class="identifier">cue</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP15"></a><b>&#167;15. </b>...bookended by a footnote text closing. The weaver ensures that these occur
in pairs and do not nest.
</p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">END_FOOTNOTE_TEXT_FOR_MTID</span>
</pre>
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">END_FOOTNOTE_TEXT_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">cue</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::end_footnote_text<button class="popup" onclick="togglePopup('usagePopup226')">...<span class="popuptext" id="usagePopup226">Usage of <b>Formats::end_footnote_text</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_8_5_1">&#167;1.3.4.1.8.5.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">cue</span><span class="plain">) {</span>
2020-04-11 12:08:53 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="2-mth.html#SP6">Methods::provided</a></span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">END_FOOTNOTE_TEXT_FOR_MTID</span><span class="plain">)) {</span>
2020-04-11 12:08:53 +00:00
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">END_FOOTNOTE_TEXT_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">cue</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP16"></a><b>&#167;16. </b>This method produces the <code class="display"><span class="extract">&gt;&gt; Example</span></code> bits of example source text, really
2019-02-04 22:26:45 +00:00
a convenience for Inform 7 code commentary.
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">DISPLAY_LINE_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-09 17:32:37 +00:00
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">DISPLAY_LINE_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::display_line<button class="popup" onclick="togglePopup('usagePopup227')">...<span class="popuptext" id="usagePopup227">Usage of <b>Formats::display_line</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_8_1">&#167;1.3.4.1.8.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">DISPLAY_LINE_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">from</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-11 12:08:53 +00:00
<p class="inwebparagraph"><a id="SP17"></a><b>&#167;17. </b><code class="display"><span class="extract">ITEM_FOR_MTID</span></code> produces an item marker in a typical (a), (b), (c), ... sort
2019-02-04 22:26:45 +00:00
of list. <code class="display"><span class="extract">depth</span></code> can be 1 or 2: you can have lists in lists, but not lists in
lists in lists. <code class="display"><span class="extract">label</span></code> is the marker text, e.g., <code class="display"><span class="extract">a</span></code>, <code class="display"><span class="extract">b</span></code>, <code class="display"><span class="extract">c</span></code>, ...; it can
also be empty, in which case the method should move to the matching level of
indentation but not weave any bracketed marker.
</p>
<p class="inwebparagraph"></p>
<ul class="items"><li>(a) This was produced by <code class="display"><span class="extract">depth</span></code> equal to 1, <code class="display"><span class="extract">label</span></code> equal to <code class="display"><span class="extract">a</span></code>.
<ul class="items"><li>(i) This was produced by <code class="display"><span class="extract">depth</span></code> equal to 2, <code class="display"><span class="extract">label</span></code> equal to <code class="display"><span class="extract">i</span></code>.
</li><li>(ii) This was produced by <code class="display"><span class="extract">depth</span></code> equal to 2, <code class="display"><span class="extract">label</span></code> equal to <code class="display"><span class="extract">ii</span></code>.
</li></ul>
<li> This was produced by <code class="display"><span class="extract">depth</span></code> equal to 1, <code class="display"><span class="extract">label</span></code> empty.
</li><li>(b) This was produced by <code class="display"><span class="extract">depth</span></code> equal to 1, <code class="display"><span class="extract">label</span></code> equal to <code class="display"><span class="extract">b</span></code>.
</li></ul>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">ITEM_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">ITEM_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">depth</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">label</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::item<button class="popup" onclick="togglePopup('usagePopup228')">...<span class="popuptext" id="usagePopup228">Usage of <b>Formats::item</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_8_3">&#167;1.3.4.1.8.3</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">depth</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">label</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">ITEM_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">depth</span><span class="plain">, </span><span class="identifier">label</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-11 12:08:53 +00:00
<p class="inwebparagraph"><a id="SP18"></a><b>&#167;18. </b>The "bar" is a horizontal line across the page, but it's woven only for
2019-02-04 22:26:45 +00:00
very old webs nowadays. New formats really needn't implement this.
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">BAR_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">BAR_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::bar<button class="popup" onclick="togglePopup('usagePopup229')">...<span class="popuptext" id="usagePopup229">Usage of <b>Formats::bar</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_7">&#167;1.3.4.1.7</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">BAR_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-11 12:08:53 +00:00
<p class="inwebparagraph"><a id="SP19"></a><b>&#167;19. </b><code class="display"><span class="extract">FIGURE_FOR_MTID</span></code> has to weave a figure, i.e., render an image in some way.
2019-02-04 22:26:45 +00:00
<code class="display"><span class="extract">figname</span></code> should be (the text of) a leafname within the <code class="display"><span class="extract">Figures</span></code> directory
of the web.
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">FIGURE_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">FIGURE_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">figname</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">w</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">h</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::figure<button class="popup" onclick="togglePopup('usagePopup230')">...<span class="popuptext" id="usagePopup230">Usage of <b>Formats::figure</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_2_1">&#167;1.3.4.1.2.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">figname</span><span class="plain">,</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">w</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">h</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">FIGURE_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">figname</span><span class="plain">, </span><span class="identifier">w</span><span class="plain">, </span><span class="identifier">h</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-11 12:08:53 +00:00
<p class="inwebparagraph"><a id="SP20"></a><b>&#167;20. </b><code class="display"><span class="extract">EMBED_FOR_MTID</span></code> has to embed some Internet-sourced content. <code class="display"><span class="extract">service</span></code>
here is something like <code class="display"><span class="extract">YouTube</span></code> or <code class="display"><span class="extract">Soundcloud</span></code>, and <code class="display"><span class="extract">ID</span></code> is whatever code
that service uses to identify the video/audio in question.
</p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">EMBED_FOR_MTID</span>
</pre>
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">EMBED_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">service</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">ID</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::embed<button class="popup" onclick="togglePopup('usagePopup231')">...<span class="popuptext" id="usagePopup231">Usage of <b>Formats::embed</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_2_2">&#167;1.3.4.1.2.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">service</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">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">EMBED_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">service</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-11 12:08:53 +00:00
<p class="inwebparagraph"><a id="SP21"></a><b>&#167;21. </b>This method weaves an angle-bracketed paragraph macro name. <code class="display"><span class="extract">defn</span></code> is set
2019-02-04 22:26:45 +00:00
if and only if this is the place where the macro is defined &mdash; the usual
thing is to render some sort of equals sign after it, if so.
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">PARA_MACRO_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">PARA_MACRO_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">para_macro</span><span class="plain"> *</span><span class="identifier">pmac</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">defn</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::para_macro<button class="popup" onclick="togglePopup('usagePopup232')">...<span class="popuptext" id="usagePopup232">Usage of <b>Formats::para_macro</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_9_6">&#167;1.3.4.1.9.6</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">para_macro</span><span class="plain"> *</span><span class="identifier">pmac</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">defn</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">PARA_MACRO_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">pmac</span><span class="plain">, </span><span class="identifier">defn</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-11 12:08:53 +00:00
<p class="inwebparagraph"><a id="SP22"></a><b>&#167;22. </b>For many formats, page breaks are meaningless, and in that case this method
2019-02-04 22:26:45 +00:00
should not be provided. Inweb uses them only for cosmetic benefit (and rarely
at that), so no harm is done if there's no visual indication here.
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">PAGEBREAK_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">PAGEBREAK_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::pagebreak<button class="popup" onclick="togglePopup('usagePopup233')">...<span class="popuptext" id="usagePopup233">Usage of <b>Formats::pagebreak</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_2">&#167;1.3.4.1.2</a>, <a href="3-tw.html#SP1_3_4_1_10_1">&#167;1.3.4.1.10.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">PAGEBREAK_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-11 12:08:53 +00:00
<p class="inwebparagraph"><a id="SP23"></a><b>&#167;23. </b>"Blank line" here might better be called "vertical skip of some kind". The
2019-02-04 22:26:45 +00:00
following should render some kind of skip, and may want to take note of whether
this happens in commentary or in code: the <code class="display"><span class="extract">in_comment</span></code> flag provides this
information.
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">BLANK_LINE_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">BLANK_LINE_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">in_comment</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::blank_line<button class="popup" onclick="togglePopup('usagePopup234')">...<span class="popuptext" id="usagePopup234">Usage of <b>Formats::blank_line</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_8_2">&#167;1.3.4.1.8.2</a>, <a href="3-tw.html#SP1_3_4_1_9_2">&#167;1.3.4.1.9.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">in_comment</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">BLANK_LINE_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">in_comment</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-11 12:08:53 +00:00
<p class="inwebparagraph"><a id="SP24"></a><b>&#167;24. </b>Another opportunity for vertical tidying-up. At the beginning of a code
2019-02-04 22:26:45 +00:00
line which occurs after a run of <code class="display"><span class="extract">@d</span></code> or <code class="display"><span class="extract">@e</span></code> definitions, this method is
called. It can then insert a little vertical gap to separate the code from
the definitions.
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">AFTER_DEFINITIONS_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">AFTER_DEFINITIONS_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::after_definitions<button class="popup" onclick="togglePopup('usagePopup235')">...<span class="popuptext" id="usagePopup235">Usage of <b>Formats::after_definitions</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_9">&#167;1.3.4.1.9</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">AFTER_DEFINITIONS_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-11 12:08:53 +00:00
<p class="inwebparagraph"><a id="SP25"></a><b>&#167;25. </b>This method is called when the weaver changes "material" &mdash; for example,
2019-02-04 22:26:45 +00:00
from <code class="display"><span class="extract">REGULAR_MATERIAL</span></code> to <code class="display"><span class="extract">CODE_MATERIAL</span></code>. The flag <code class="display"><span class="extract">content</span></code> is set if
the line on which this happens contains some content which will then be
woven; it will be clear for blank lines, or lines intercepted by the
weaver and turned into something else (such as list items).
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">CHANGE_MATERIAL_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">CHANGE_MATERIAL_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">old_material</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">new_material</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">content</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">plainly</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::change_material<button class="popup" onclick="togglePopup('usagePopup236')">...<span class="popuptext" id="usagePopup236">Usage of <b>Formats::change_material</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_1">&#167;1.3.4.1.1</a>, <a href="3-tw.html#SP1_3_4_1_8_3">&#167;1.3.4.1.8.3</a>, <a href="3-tw.html#SP1_3_4_1_8_4">&#167;1.3.4.1.8.4</a>, <a href="3-tw.html#SP1_3_4_1_9_1">&#167;1.3.4.1.9.1</a>, <a href="3-tw.html#SP1_3_4_2">&#167;1.3.4.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">old_material</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">new_material</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">content</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">plainly</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">CHANGE_MATERIAL_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">old_material</span><span class="plain">, </span><span class="identifier">new_material</span><span class="plain">,</span>
<span class="identifier">content</span><span class="plain">, </span><span class="identifier">plainly</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-11 12:08:53 +00:00
<p class="inwebparagraph"><a id="SP26"></a><b>&#167;26. </b>This is called on a change of colour. "Colour" is really a shorthand way
2019-02-04 22:26:45 +00:00
of saying something more like "style", but seemed less ambiguous. In HTML,
this might trigger a change of CSS span style; in plain text, it would do
nothing.
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">CHANGE_COLOUR_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">CHANGE_COLOUR_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">col</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">in_code</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::change_colour<button class="popup" onclick="togglePopup('usagePopup237')">...<span class="popuptext" id="usagePopup237">Usage of <b>Formats::change_colour</b>:<br>TeX Format - <a href="5-tf.html#SP8_2">&#167;8.2</a>, <a href="5-tf.html#SP15">&#167;15</a><br>HTML Formats - <a href="5-hf.html#SP9_3">&#167;9.3</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">col</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">in_code</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">CHANGE_COLOUR_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">col</span><span class="plain">, </span><span class="identifier">in_code</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-11 12:08:53 +00:00
<p class="inwebparagraph"><a id="SP27"></a><b>&#167;27. </b>The following takes text, divides it up at stroke-mark boundaries &mdash;
2019-02-04 22:26:45 +00:00
that is, <code class="display"><span class="extract">this is inside</span></code>, this is outside &mdash; and sends contiguous pieces
of it either to <code class="display"><span class="extract">Formats::source_fragment</span></code> or <code class="display"><span class="extract">Formats::text_fragment</span></code>
as appropriate.
</p>
<pre class="display">
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::text<button class="popup" onclick="togglePopup('usagePopup238')">...<span class="popuptext" id="usagePopup238">Usage of <b>Formats::text</b>:<br>Tags - <a href="2-tgs.html#SP7">&#167;7</a>, <a href="2-tgs.html#SP7_1">&#167;7.1</a><br>The Weaver - <a href="3-tw.html#SP1_3_4_1_8">&#167;1.3.4.1.8</a>, <a href="3-tw.html#SP1_3_4_1_8_4">&#167;1.3.4.1.8.4</a>, <a href="3-tw.html#SP1_3_4_1_10_5">&#167;1.3.4.1.10.5</a>, <a href="3-tw.html#SP2_1">&#167;2.1</a>, <a href="3-tw.html#SP2_3">&#167;2.3</a>, <a href="3-tw.html#SP3">&#167;3</a>, <a href="3-tw.html#SP3_1">&#167;3.1</a><br>Plain Text Format - <a href="5-ptf.html#SP3">&#167;3</a><br>TeX Format - <a href="5-tf.html#SP4">&#167;4</a><br>HTML Formats - <a href="5-hf.html#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</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="functiontext"><a href="#SP27">Formats::text_r</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">);</span>
<span class="plain">}</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::text_comment<button class="popup" onclick="togglePopup('usagePopup239')">...<span class="popuptext" id="usagePopup239">Usage of <b>Formats::text_comment</b>:<br>TeX Format - <a href="5-tf.html#SP24_2">&#167;24.2</a><br>HTML Formats - <a href="5-hf.html#SP9">&#167;9</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</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="functiontext"><a href="#SP27">Formats::text_r</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::text_r<button class="popup" onclick="togglePopup('usagePopup240')">...<span class="popuptext" id="usagePopup240">Usage of <b>Formats::text_r</b>:<br><a href="#SP27_1">&#167;27.1</a>, <a href="#SP27_2">&#167;27.2</a>, <a href="#SP27_3">&#167;27.3</a>, <a href="#SP27_4_1">&#167;27.4.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</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">within</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">comments</span><span class="plain">) {</span>
2020-04-09 17:32:37 +00:00
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">code_in_comments_notation</span><span class="plain"> =</span>
<span class="functiontext"><a href="8-bdfw.html#SP6">Bibliographic::get_datum</a></span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">weave_web</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">,</span>
<span class="plain">(</span><span class="identifier">comments</span><span class="plain">)?(</span><span class="identifier">I</span><span class="string">"Code In Code Comments Notation"</span><span class="plain">):(</span><span class="identifier">I</span><span class="string">"Code In Commentary Notation"</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::ne</a></span><span class="plain">(</span><span class="identifier">code_in_comments_notation</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Off"</span><span class="plain">)) </span>&lt;<span class="cwebmacro">Split text and code extracts</span> <span class="cwebmacronumber">27.1</span>&gt;<span class="plain">;</span>
2020-04-09 17:32:37 +00:00
2020-04-11 12:08:53 +00:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">within</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) </span>&lt;<span class="cwebmacro">Recognose hyperlinks</span> <span class="cwebmacronumber">27.2</span>&gt;<span class="plain">;</span>
2020-04-09 17:32:37 +00:00
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">xref_notation</span><span class="plain"> = </span><span class="functiontext"><a href="8-bdfw.html#SP6">Bibliographic::get_datum</a></span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">weave_web</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">,</span>
2020-04-09 17:32:37 +00:00
<span class="identifier">I</span><span class="string">"Cross-References Notation"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::ne</a></span><span class="plain">(</span><span class="identifier">xref_notation</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Off"</span><span class="plain">)) </span>&lt;<span class="cwebmacro">Recognise cross-references</span> <span class="cwebmacronumber">27.4</span>&gt;<span class="plain">;</span>
2020-04-09 17:32:37 +00:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">within</span><span class="plain">) {</span>
<span class="functiontext"><a href="#SP11">Formats::source_fragment</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">);</span>
2020-04-09 17:32:37 +00:00
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
2020-04-11 12:08:53 +00:00
&lt;<span class="cwebmacro">Detect use of footnotes</span> <span class="cwebmacronumber">27.3</span>&gt;<span class="plain">;</span>
2020-04-12 16:24:23 +00:00
<span class="functiontext"><a href="#SP28">Formats::text_fragment</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">);</span>
2020-04-09 17:32:37 +00:00
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-11 12:08:53 +00:00
<p class="inwebparagraph"><a id="SP27_1"></a><b>&#167;27.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Split text and code extracts</span> <span class="cwebmacronumber">27.1</span>&gt; =
2020-04-09 17:32:37 +00:00
</code></p>
<pre class="displaydefn">
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"> &lt; </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">id</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">) == </span><span class="character">'\\'</span><span class="plain">) </span><span class="identifier">i</span><span class="plain"> += </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">code_in_comments_notation</span><span class="plain">) - </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP25">Str::includes_at</a></span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">code_in_comments_notation</span><span class="plain">)) {</span>
2020-04-09 17:32:37 +00:00
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">);</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">); </span><span class="functiontext"><a href="4-sm.html#SP15">Str::truncate</a></span><span class="plain">(</span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
2020-04-09 17:32:37 +00:00
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">);</span>
<span class="functiontext"><a href="4-sm.html#SP25">Str::substr</a></span><span class="plain">(</span><span class="identifier">after</span><span class="plain">, </span><span class="functiontext"><a href="4-sm.html#SP10">Str::at</a></span><span class="plain">(</span><span class="identifier">id</span><span class="plain">,</span>
<span class="identifier">i</span><span class="plain"> + </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">code_in_comments_notation</span><span class="plain">)), </span><span class="functiontext"><a href="4-sm.html#SP10">Str::end</a></span><span class="plain">(</span><span class="identifier">id</span><span class="plain">));</span>
<span class="functiontext"><a href="#SP27">Formats::text_r</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">within</span><span class="plain">, </span><span class="identifier">comments</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP27">Formats::text_r</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">after</span><span class="plain">, (</span><span class="identifier">within</span><span class="plain">)?</span><span class="identifier">FALSE:TRUE</span><span class="plain">, </span><span class="identifier">comments</span><span class="plain">);</span>
2020-04-09 17:32:37 +00:00
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain">;</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
<span class="plain">}</span>
2020-04-09 17:32:37 +00:00
</pre>
<p class="inwebparagraph"></p>
2020-04-11 12:08:53 +00:00
<p class="endnote">This code is used in <a href="#SP27">&#167;27</a>.</p>
2020-04-09 17:32:37 +00:00
2020-04-11 12:08:53 +00:00
<p class="inwebparagraph"><a id="SP27_2"></a><b>&#167;27.2. </b><code class="display">
&lt;<span class="cwebmacrodefn">Recognose hyperlinks</span> <span class="cwebmacronumber">27.2</span>&gt; =
2020-04-09 17:32:37 +00:00
</code></p>
<pre class="displaydefn">
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"> &lt; </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">id</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext"><a href="4-sm.html#SP25">Str::includes_at</a></span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"http://"</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="functiontext"><a href="4-sm.html#SP25">Str::includes_at</a></span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"https://"</span><span class="plain">))) {</span>
2020-04-09 13:00:28 +00:00
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">);</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">); </span><span class="functiontext"><a href="4-sm.html#SP15">Str::truncate</a></span><span class="plain">(</span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
2020-04-09 13:00:28 +00:00
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">);</span>
<span class="functiontext"><a href="4-sm.html#SP25">Str::substr</a></span><span class="plain">(</span><span class="identifier">after</span><span class="plain">, </span><span class="functiontext"><a href="4-sm.html#SP10">Str::at</a></span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">), </span><span class="functiontext"><a href="4-sm.html#SP10">Str::end</a></span><span class="plain">(</span><span class="identifier">id</span><span class="plain">));</span>
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext"><a href="4-pm.html#SP9">Regexp::create_mr</a></span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">after</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(https*://%C+)(%c*)"</span><span class="plain">)) {</span>
<span class="functiontext"><a href="#SP27">Formats::text_r</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">within</span><span class="plain">, </span><span class="identifier">comments</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP12">Formats::url</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0], </span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0], </span><span class="constant">TRUE</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP27">Formats::text_r</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[1], </span><span class="identifier">within</span><span class="plain">, </span><span class="identifier">comments</span><span class="plain">);</span>
<span class="functiontext"><a href="4-pm.html#SP9">Regexp::dispose_of</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">);</span>
2020-04-09 17:32:37 +00:00
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="functiontext"><a href="4-pm.html#SP9">Regexp::dispose_of</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">);</span>
2020-04-09 17:32:37 +00:00
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
2019-02-04 22:26:45 +00:00
</pre>
<p class="inwebparagraph"></p>
2020-04-11 12:08:53 +00:00
<p class="endnote">This code is used in <a href="#SP27">&#167;27</a>.</p>
<p class="inwebparagraph"><a id="SP27_3"></a><b>&#167;27.3. </b><code class="display">
&lt;<span class="cwebmacrodefn">Detect use of footnotes</span> <span class="cwebmacronumber">27.3</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">cue</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">allow</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="2-tp.html#SP4">Parser::detect_footnote</a></span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">weave_web</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">cue</span><span class="plain">, </span><span class="identifier">after</span><span class="plain">)) {</span>
2020-04-11 12:08:53 +00:00
<span class="identifier">allow</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="functiontext"><a href="#SP27">Formats::text_r</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">within</span><span class="plain">, </span><span class="identifier">comments</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP13">Formats::footnote_cue</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">cue</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP27">Formats::text_r</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">after</span><span class="plain">, </span><span class="identifier">within</span><span class="plain">, </span><span class="identifier">comments</span><span class="plain">);</span>
2020-04-11 12:08:53 +00:00
<span class="plain">}</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">cue</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">allow</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP27">&#167;27</a>.</p>
2020-04-11 12:08:53 +00:00
<p class="inwebparagraph"><a id="SP27_4"></a><b>&#167;27.4. </b><code class="display">
&lt;<span class="cwebmacrodefn">Recognise cross-references</span> <span class="cwebmacronumber">27.4</span>&gt; =
2020-04-09 17:32:37 +00:00
</code></p>
<pre class="displaydefn">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">xref_notation</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"> &lt; </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">id</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">within</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) &amp;&amp; (</span><span class="functiontext"><a href="4-sm.html#SP25">Str::includes_at</a></span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">xref_notation</span><span class="plain">))) {</span>
2020-04-09 17:32:37 +00:00
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">j</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain"> + </span><span class="identifier">N</span><span class="plain">+1;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">j</span><span class="plain"> &lt; </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></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="functiontext"><a href="4-sm.html#SP25">Str::includes_at</a></span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">, </span><span class="identifier">xref_notation</span><span class="plain">)) {</span>
2020-04-09 17:32:37 +00:00
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">allow</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">reference</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">);</span>
<span class="functiontext"><a href="4-sm.html#SP25">Str::substr</a></span><span class="plain">(</span><span class="identifier">before</span><span class="plain">, </span><span class="functiontext"><a href="4-sm.html#SP10">Str::start</a></span><span class="plain">(</span><span class="identifier">id</span><span class="plain">), </span><span class="functiontext"><a href="4-sm.html#SP10">Str::at</a></span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">));</span>
<span class="functiontext"><a href="4-sm.html#SP25">Str::substr</a></span><span class="plain">(</span><span class="identifier">reference</span><span class="plain">, </span><span class="functiontext"><a href="4-sm.html#SP10">Str::at</a></span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">i</span><span class="plain"> + </span><span class="identifier">N</span><span class="plain">), </span><span class="functiontext"><a href="4-sm.html#SP10">Str::at</a></span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">));</span>
<span class="functiontext"><a href="4-sm.html#SP25">Str::substr</a></span><span class="plain">(</span><span class="identifier">after</span><span class="plain">, </span><span class="functiontext"><a href="4-sm.html#SP10">Str::at</a></span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">j</span><span class="plain"> + </span><span class="identifier">N</span><span class="plain">), </span><span class="functiontext"><a href="4-sm.html#SP10">Str::end</a></span><span class="plain">(</span><span class="identifier">id</span><span class="plain">));</span>
2020-04-11 12:08:53 +00:00
&lt;<span class="cwebmacro">Attempt to resolve the cross-reference</span> <span class="cwebmacronumber">27.4.1</span>&gt;<span class="plain">;</span>
2020-04-09 17:32:37 +00:00
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">reference</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">allow</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">j</span><span class="plain">++;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-11 12:08:53 +00:00
<p class="endnote">This code is used in <a href="#SP27">&#167;27</a>.</p>
2020-04-09 17:32:37 +00:00
2020-04-11 12:08:53 +00:00
<p class="inwebparagraph"><a id="SP27_4_1"></a><b>&#167;27.4.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Attempt to resolve the cross-reference</span> <span class="cwebmacronumber">27.4.1</span>&gt; =
2020-04-09 17:32:37 +00:00
</code></p>
<pre class="displaydefn">
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">url</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">title</span><span class="plain">);</span>
2020-04-14 16:57:22 +00:00
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="6-cln.html#SP10">Colonies::resolve_reference_in_weave</a></span><span class="plain">(</span><span class="identifier">url</span><span class="plain">, </span><span class="identifier">title</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">weave_to</span><span class="plain">, </span><span class="identifier">reference</span><span class="plain">,</span>
2020-04-12 16:24:23 +00:00
<span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">weave_web</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">current_weave_line</span><span class="plain">)) {</span>
<span class="functiontext"><a href="#SP27">Formats::text_r</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">within</span><span class="plain">, </span><span class="identifier">comments</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP12">Formats::url</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">url</span><span class="plain">, </span><span class="identifier">title</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP27">Formats::text_r</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">after</span><span class="plain">, </span><span class="identifier">within</span><span class="plain">, </span><span class="identifier">comments</span><span class="plain">);</span>
2020-04-09 17:32:37 +00:00
<span class="identifier">allow</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">url</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">title</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-11 12:08:53 +00:00
<p class="endnote">This code is used in <a href="#SP27_4">&#167;27.4</a>.</p>
2020-04-09 17:32:37 +00:00
2020-04-12 16:24:23 +00:00
<p class="inwebparagraph"><a id="SP28"></a><b>&#167;28. </b><code class="display"><span class="extract">COMMENTARY_TEXT_FOR_MTID</span></code> straightforwardly weaves out a run of contiguous
2019-02-04 22:26:45 +00:00
text. Ordinarily, any formulae written in TeX notation (i.e., in dollar signs
used as brackets) will be transmogrified into a plain text paraphrase, but
the <code class="display"><span class="extract">PRESERVE_MATH_MODE_FOR_MTID</span></code> can prevent this. (And of course the TeX
format does, because it wants to keep the formulae in all their glory.)
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">COMMENTARY_TEXT_FOR_MTID</span>
<span class="definitionkeyword">enum</span> <span class="constant">PRESERVE_MATH_MODE_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-10 20:29:28 +00:00
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">PRESERVE_MATH_MODE_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</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">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">COMMENTARY_TEXT_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">)</span>
2019-02-04 22:26:45 +00:00
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::text_fragment<button class="popup" onclick="togglePopup('usagePopup241')">...<span class="popuptext" id="usagePopup241">Usage of <b>Formats::text_fragment</b>:<br><a href="#SP27">&#167;27</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">fragment</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
2019-02-04 22:26:45 +00:00
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">matter</span><span class="plain">);</span>
2020-04-08 11:19:34 +00:00
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span>
<span class="functiontext"><a href="8-bdfw.html#SP6">Bibliographic::get_datum</a></span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">weave_web</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"TeX Mathematics Notation"</span><span class="plain">), </span><span class="identifier">L</span><span class="string">"On"</span><span class="plain">)) {</span>
2020-04-08 11:19:34 +00:00
<span class="identifier">rv</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
2020-04-10 20:29:28 +00:00
<span class="identifier">IMETHOD_CALL</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">PRESERVE_MATH_MODE_FOR_MTID</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">matter</span><span class="plain">, </span><span class="identifier">fragment</span><span class="plain">);</span>
2020-04-08 11:19:34 +00:00
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rv</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) </span><span class="functiontext"><a href="5-tf.html#SP28">TeX::remove_math_mode</a></span><span class="plain">(</span><span class="identifier">matter</span><span class="plain">, </span><span class="identifier">fragment</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">matter</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">matter</span><span class="plain">, </span><span class="identifier">fragment</span><span class="plain">);</span>
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">COMMENTARY_TEXT_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">matter</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">matter</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-12 16:24:23 +00:00
<p class="inwebparagraph"><a id="SP29"></a><b>&#167;29. </b>The weaver has special typographical support for the stand-alone Inform
2019-02-04 22:26:45 +00:00
document of Preform grammar, and this is the hook for it. Most formats
should ignore it.
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">PREFORM_DOCUMENT_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">PREFORM_DOCUMENT_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">concluding_comment</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Formats::preform_document<button class="popup" onclick="togglePopup('usagePopup242')">...<span class="popuptext" id="usagePopup242">Usage of <b>Formats::preform_document</b>:<br>InC Support - <a href="4-is.html#SP16">&#167;16</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">,</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">concluding_comment</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">IMETHOD_CALL</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">PREFORM_DOCUMENT_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">, </span><span class="identifier">matter</span><span class="plain">,</span>
2019-02-04 22:26:45 +00:00
<span class="identifier">concluding_comment</span><span class="plain">);</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain">;</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-12 16:24:23 +00:00
<p class="inwebparagraph"><a id="SP30"></a><b>&#167;30. </b>When the weaver adds one of its endnotes &mdash; "This function is used in...",
2019-02-04 22:26:45 +00:00
or some such &mdash; it calls this method twice, once before the start, with
<code class="display"><span class="extract">end</span></code> set to 1, and once after the end, with <code class="display"><span class="extract">end</span></code> set to 2.
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">ENDNOTE_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">ENDNOTE_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">end</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::endnote<button class="popup" onclick="togglePopup('usagePopup243')">...<span class="popuptext" id="usagePopup243">Usage of <b>Formats::endnote</b>:<br>Tags - <a href="2-tgs.html#SP7">&#167;7</a>, <a href="2-tgs.html#SP7_1">&#167;7.1</a><br>The Weaver - <a href="3-tw.html#SP2_1">&#167;2.1</a>, <a href="3-tw.html#SP2_2">&#167;2.2</a>, <a href="3-tw.html#SP2_3">&#167;2.3</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">end</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">ENDNOTE_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">end</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-12 16:24:23 +00:00
<p class="inwebparagraph"><a id="SP31"></a><b>&#167;31. </b>"Locale" here isn't used in the Unix sense. It means text which describes
2019-02-04 22:26:45 +00:00
a range of numbered paragraphs, from <code class="display"><span class="extract">par1</span></code> to <code class="display"><span class="extract">par2</span></code>, though <code class="display"><span class="extract">par2</span></code> can
instead be null, in which case the description is of just one para. (This
is often used in endnotes.)
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">LOCALE_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">LOCALE_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">par1</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">par2</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::locale<button class="popup" onclick="togglePopup('usagePopup244')">...<span class="popuptext" id="usagePopup244">Usage of <b>Formats::locale</b>:<br>The Weaver - <a href="3-tw.html#SP2_1">&#167;2.1</a>, <a href="3-tw.html#SP3_1">&#167;3.1</a><br>Plain Text Format - <a href="5-ptf.html#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">par1</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">par2</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">LOCALE_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">par1</span><span class="plain">, </span><span class="identifier">par2</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-12 16:24:23 +00:00
<p class="inwebparagraph"><a id="SP32"></a><b>&#167;32. </b>And finally: the bottom of the woven file. The <code class="display"><span class="extract">comment</span></code> is, again, not
2019-02-04 22:26:45 +00:00
intended for human eyes, and will be some sort of "End of weave" remark.
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">TAIL_FOR_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">TAIL_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">comment</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::tail<button class="popup" onclick="togglePopup('usagePopup245')">...<span class="popuptext" id="usagePopup245">Usage of <b>Formats::tail</b>:<br>The Weaver - <a href="3-tw.html#SP1_5">&#167;1.5</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">comment</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">TAIL_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">comment</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-12 16:24:23 +00:00
<p class="inwebparagraph"><a id="SP33"></a><b>&#167;33. Post-processing. </b>Consider what happens when Inweb makes a PDF, via TeX. The initial weave is
2019-02-04 22:26:45 +00:00
to a TeX file; it's then "post-processing" which will turn this into a PDF.
The following method calls allow such two-stage formats to function; in
this case, it would be the PDF format which provides the necessary methods
to turn TeX into PDF. The important method is this one:
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">POST_PROCESS_POS_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">POST_PROCESS_POS_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">open_afterwards</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::post_process_weave<button class="popup" onclick="togglePopup('usagePopup246')">...<span class="popuptext" id="usagePopup246">Usage of <b>Formats::post_process_weave</b>:<br>The Swarm - <a href="3-ts.html#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">open_afterwards</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">, </span><span class="constant">POST_PROCESS_POS_MTID</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">open_afterwards</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-12 16:24:23 +00:00
<p class="inwebparagraph"><a id="SP34"></a><b>&#167;34. </b>Optionally, a fancy report can be printed out, to describe what has been
2019-02-04 22:26:45 +00:00
done:
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">POST_PROCESS_REPORT_POS_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">POST_PROCESS_REPORT_POS_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::report_on_post_processing<button class="popup" onclick="togglePopup('usagePopup247')">...<span class="popuptext" id="usagePopup247">Usage of <b>Formats::report_on_post_processing</b>:<br>The Swarm - <a href="3-ts.html#SP2_3">&#167;2.3</a></span></button></span><span class="plain">(</span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">) {</span>
2020-04-06 11:26:10 +00:00
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">, </span><span class="constant">POST_PROCESS_REPORT_POS_MTID</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">);</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-12 16:24:23 +00:00
<p class="inwebparagraph"><a id="SP35"></a><b>&#167;35. </b>After post-processing, an index file is sometimes needed. For example, if a
2019-02-04 22:26:45 +00:00
big web is woven to a swarm of PDFs, one for each section, then we also want
to make an index page in HTML which provides annotated links to those PDFs.
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">INDEX_PDFS_POS_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">INDEX_PDFS_POS_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Formats::index_pdfs<button class="popup" onclick="togglePopup('usagePopup248')">...<span class="popuptext" id="usagePopup248">Usage of <b>Formats::index_pdfs</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">format</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="functiontext"><a href="#SP1">Formats::find_by_name</a></span><span class="plain">(</span><span class="identifier">format</span><span class="plain">);</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">wf</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">IMETHOD_CALLV</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">INDEX_PDFS_POS_MTID</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain">;</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2020-04-12 16:24:23 +00:00
<p class="inwebparagraph"><a id="SP36"></a><b>&#167;36. </b>And in that index file, we may want to substitute in values for placeholder
2019-02-04 22:26:45 +00:00
text like <code class="display"><span class="extract">[[PDF Size]]</span></code> in the template file. This is the <code class="display"><span class="extract">detail</span></code>.
</p>
<pre class="definitions">
2020-04-06 11:26:10 +00:00
<span class="definitionkeyword">enum</span> <span class="constant">POST_PROCESS_SUBSTITUTE_POS_MTID</span>
2019-02-04 22:26:45 +00:00
</pre>
<pre class="display">
2020-04-06 11:26:10 +00:00
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">POST_PROCESS_SUBSTITUTE_POS_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">detail</span><span class="plain">, </span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">)</span>
2020-04-13 22:30:42 +00:00
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Formats::substitute_post_processing_data<button class="popup" onclick="togglePopup('usagePopup249')">...<span class="popuptext" id="usagePopup249">Usage of <b>Formats::substitute_post_processing_data</b>:<br>The Indexer - <a href="3-ti.html#SP6_1_8_6">&#167;6.1.8.6</a>, <a href="3-ti.html#SP6_1_8_7_1">&#167;6.1.8.7.1</a>, <a href="3-ti.html#SP6_1_8_8_1">&#167;6.1.8.8.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
2020-04-06 11:26:10 +00:00
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">detail</span><span class="plain">, </span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">IMETHOD_CALL</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">, </span><span class="constant">POST_PROCESS_SUBSTITUTE_POS_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">detail</span><span class="plain">, </span><span class="identifier">pattern</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain">;</span>
2019-02-04 22:26:45 +00:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2019-03-12 23:32:12 +00:00
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 5: Formats.)</i></li><li><a href="5-ptf.html">Continue with 'Plain Text Format'</a></li></ul><hr class="tocbar">
<!--End of weave-->
2020-04-11 20:39:43 +00:00
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
</main>
2019-02-04 22:26:45 +00:00
</body>
</html>