inweb-bootstrap/docs/inweb/4-as.html
2020-04-11 23:43:27 +01:00

357 lines
74 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>ACME Support</title>
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="../inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
<h2>Foundation</h2>
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'ACME Support' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#4">Chapter 4: Languages</a></li><li><b>ACME Support</b></li></ul><p class="purpose">For generic programming languages by the ACME corporation.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. One Dozen ACME Explosive Tennis Balls</a></li><li><a href="#SP3">&#167;3. Tangling methods</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. One Dozen ACME Explosive Tennis Balls. </b>Older readers will remember that Wile E. Coyote, when wishing to frustrate
Road Runner with some ingenious device, would invariably buy it from the Acme
Corporation, which manufactured everything imaginable. See Wikipedia, "Acme
Corporation", for much else.
</p>
<p class="inwebparagraph">For us, ACME is an imaginary programming language, providing generic support
for comments and syntax colouring. Ironically, this code grew out of a language
actually called ACME: the 6502 assembler of the same name.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::add_fallbacks<button class="popup" onclick="togglePopup('usagePopup151')">...<span class="popuptext" id="usagePopup151">Usage of <b>ACMESupport::add_fallbacks</b>:<br>Programming Languages - <a href="4-pl.html#SP7_2">&#167;7.2</a></span></button></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">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">pl</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">PARSE_TYPES_PAR_MTID</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">PARSE_TYPES_PAR_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP4">ACMESupport::parse_types</a></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">pl</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">PARSE_FUNCTIONS_PAR_MTID</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">PARSE_FUNCTIONS_PAR_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP5">ACMESupport::parse_functions</a></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">pl</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">PARSE_COMMENT_TAN_MTID</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">PARSE_COMMENT_TAN_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP3">ACMESupport::parse_comment</a></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">pl</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">COMMENT_TAN_MTID</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">COMMENT_TAN_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP3">ACMESupport::comment</a></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">pl</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">SHEBANG_TAN_MTID</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">SHEBANG_TAN_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP3">ACMESupport::shebang</a></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">pl</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">BEFORE_MACRO_EXPANSION_TAN_MTID</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">BEFORE_MACRO_EXPANSION_TAN_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP3">ACMESupport::before_macro_expansion</a></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">pl</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">AFTER_MACRO_EXPANSION_TAN_MTID</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">AFTER_MACRO_EXPANSION_TAN_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP3">ACMESupport::after_macro_expansion</a></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">pl</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">START_DEFN_TAN_MTID</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">START_DEFN_TAN_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP3">ACMESupport::start_definition</a></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">pl</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">PROLONG_DEFN_TAN_MTID</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">PROLONG_DEFN_TAN_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP3">ACMESupport::prolong_definition</a></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">pl</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">END_DEFN_TAN_MTID</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">END_DEFN_TAN_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP3">ACMESupport::end_definition</a></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">pl</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">OPEN_IFDEF_TAN_MTID</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">OPEN_IFDEF_TAN_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP3">ACMESupport::I6_open_ifdef</a></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">pl</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">CLOSE_IFDEF_TAN_MTID</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">CLOSE_IFDEF_TAN_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP3">ACMESupport::I6_close_ifdef</a></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">pl</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">INSERT_LINE_MARKER_TAN_MTID</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">INSERT_LINE_MARKER_TAN_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP3">ACMESupport::insert_line_marker</a></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">pl</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">SUPPRESS_DISCLAIMER_TAN_MTID</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">SUPPRESS_DISCLAIMER_TAN_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP6">ACMESupport::suppress_disclaimer</a></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">pl</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">BEGIN_WEAVE_WEA_MTID</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">BEGIN_WEAVE_WEA_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP7">ACMESupport::begin_weave</a></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">pl</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">RESET_SYNTAX_COLOURING_WEA_MTID</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">RESET_SYNTAX_COLOURING_WEA_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP8">ACMESupport::reset_syntax_colouring</a></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">pl</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">SYNTAX_COLOUR_WEA_MTID</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">SYNTAX_COLOUR_WEA_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP8">ACMESupport::syntax_colour</a></span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b>This utility does a very limited <code class="display"><span class="extract">WRITE</span></code>-like job. (We don't want to use
the actual <code class="display"><span class="extract">WRITE</span></code> because that would make it possible for malicious language
files to crash Inweb.)
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::expand<button class="popup" onclick="togglePopup('usagePopup152')">...<span class="popuptext" id="usagePopup152">Usage of <b>ACMESupport::expand</b>:<br><a href="#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">prototype</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">) {</span>
<span class="reserved">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">prototype</span><span class="plain">) &gt; </span><span class="constant">0</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">prototype</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="identifier">wchar_t</span><span class="plain"> </span><span class="identifier">c</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">prototype</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">c</span><span class="plain"> == </span><span class="character">'%'</span><span class="plain">) &amp;&amp; (</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">prototype</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+1) == </span><span class="character">'S'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">S</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">S</span><span class="plain">);</span>
<span class="identifier">i</span><span class="plain">++;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'%'</span><span class="plain">) &amp;&amp; (</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">prototype</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+1) == </span><span class="character">'d'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">N</span><span class="plain"> &gt;= </span><span class="constant">0</span><span class="plain">)) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d"</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">);</span>
<span class="identifier">i</span><span class="plain">++;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'%'</span><span class="plain">) &amp;&amp; (</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">prototype</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+1) == </span><span class="character">'f'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">F</span><span class="plain">)) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%/f"</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
<span class="identifier">i</span><span class="plain">++;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">PUT</span><span class="plain">(</span><span class="identifier">c</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. Tangling methods. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::shebang<button class="popup" onclick="togglePopup('usagePopup153')">...<span class="popuptext" id="usagePopup153">Usage of <b>ACMESupport::shebang</b>:<br><a href="#SP1">&#167;1</a></span></button></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">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</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">tangle_target</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain">) {</span>
<span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">shebang</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::before_macro_expansion<button class="popup" onclick="togglePopup('usagePopup154')">...<span class="popuptext" id="usagePopup154">Usage of <b>ACMESupport::before_macro_expansion</b>:<br><a href="#SP1">&#167;1</a></span></button></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="constant">OUTPUT_STREAM</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="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">before_macro_expansion</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::after_macro_expansion<button class="popup" onclick="togglePopup('usagePopup155')">...<span class="popuptext" id="usagePopup155">Usage of <b>ACMESupport::after_macro_expansion</b>:<br><a href="#SP1">&#167;1</a></span></button></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="constant">OUTPUT_STREAM</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="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">after_macro_expansion</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ACMESupport::start_definition<button class="popup" onclick="togglePopup('usagePopup156')">...<span class="popuptext" id="usagePopup156">Usage of <b>ACMESupport::start_definition</b>:<br><a href="#SP1">&#167;1</a></span></button></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">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">term</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">start</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">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-lm.html#SP30">LanguageMethods::supports_definitions</a></span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">)) {</span>
<span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">start_definition</span><span class="plain">, </span><span class="identifier">term</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="functiontext"><a href="3-tt.html#SP3">Tangler::tangle_code</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">start</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="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ACMESupport::prolong_definition<button class="popup" onclick="togglePopup('usagePopup157')">...<span class="popuptext" id="usagePopup157">Usage of <b>ACMESupport::prolong_definition</b>:<br><a href="#SP1">&#167;1</a></span></button></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">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">more</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">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-lm.html#SP30">LanguageMethods::supports_definitions</a></span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">)) {</span>
<span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">prolong_definition</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="functiontext"><a href="3-tt.html#SP3">Tangler::tangle_code</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">more</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="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ACMESupport::end_definition<button class="popup" onclick="togglePopup('usagePopup158')">...<span class="popuptext" id="usagePopup158">Usage of <b>ACMESupport::end_definition</b>:<br><a href="#SP1">&#167;1</a></span></button></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">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</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">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-lm.html#SP30">LanguageMethods::supports_definitions</a></span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">)) {</span>
<span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">end_definition</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::I6_open_ifdef<button class="popup" onclick="togglePopup('usagePopup159')">...<span class="popuptext" id="usagePopup159">Usage of <b>ACMESupport::I6_open_ifdef</b>:<br><a href="#SP1">&#167;1</a></span></button></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">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">symbol</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">sense</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sense</span><span class="plain">) </span><span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">start_ifdef</span><span class="plain">, </span><span class="identifier">symbol</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">start_ifndef</span><span class="plain">, </span><span class="identifier">symbol</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::I6_close_ifdef<button class="popup" onclick="togglePopup('usagePopup160')">...<span class="popuptext" id="usagePopup160">Usage of <b>ACMESupport::I6_close_ifdef</b>:<br><a href="#SP1">&#167;1</a></span></button></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">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">symbol</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">sense</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sense</span><span class="plain">) </span><span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">end_ifdef</span><span class="plain">, </span><span class="identifier">symbol</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">end_ifndef</span><span class="plain">, </span><span class="identifier">symbol</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::insert_line_marker<button class="popup" onclick="togglePopup('usagePopup161')">...<span class="popuptext" id="usagePopup161">Usage of <b>ACMESupport::insert_line_marker</b>:<br><a href="#SP1">&#167;1</a></span></button></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">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</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="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">line_marker</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">,</span>
<span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">source</span><span class="plain">.</span><span class="identifier">line_count</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">source</span><span class="plain">.</span><span class="element">text_file_filename</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::comment<button class="popup" onclick="togglePopup('usagePopup162')">...<span class="popuptext" id="usagePopup162">Usage of <b>ACMESupport::comment</b>:<br><a href="#SP1">&#167;1</a></span></button></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">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">comm</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">pl</span><span class="plain">-&gt;</span><span class="element">multiline_comment_open</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">multiline_comment_open</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, -1, </span><span class="identifier">NULL</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">comm</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">multiline_comment_close</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">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">pl</span><span class="plain">-&gt;</span><span class="element">line_comment</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">line_comment</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" %S\n"</span><span class="plain">, </span><span class="identifier">comm</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">whole_line_comment</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">whole_line_comment</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" %S\n"</span><span class="plain">, </span><span class="identifier">comm</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ACMESupport::parse_comment<button class="popup" onclick="togglePopup('usagePopup163')">...<span class="popuptext" id="usagePopup163">Usage of <b>ACMESupport::parse_comment</b>:<br><a href="#SP1">&#167;1</a></span></button></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">text_stream</span><span class="plain"> *</span><span class="identifier">line</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">part_before_comment</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">part_within_comment</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">q_mode</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">c_mode</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">non_white_space</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">, </span><span class="identifier">c_position</span><span class="plain"> = -1, </span><span class="identifier">c_end</span><span class="plain"> = -1;</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">line</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="identifier">wchar_t</span><span class="plain"> </span><span class="identifier">c</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">line</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">c_mode</span><span class="plain"> == </span><span class="constant">2</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP25">Str::includes_at</a></span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">multiline_comment_close</span><span class="plain">)) {</span>
<span class="identifier">c_mode</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">; </span><span class="identifier">c_end</span><span class="plain"> = </span><span class="identifier">i</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">pl</span><span class="plain">-&gt;</span><span class="element">multiline_comment_close</span><span class="plain">) - </span><span class="constant">1</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c_mode</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) &amp;&amp; (!(</span><span class="functiontext"><a href="4-chr.html#SP2">Characters::is_whitespace</a></span><span class="plain">(</span><span class="identifier">c</span><span class="plain">)))) </span><span class="identifier">non_white_space</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> == </span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_first_char</a></span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">string_literal_escape</span><span class="plain">)) &amp;&amp; (</span><span class="identifier">q_mode</span><span class="plain"> == </span><span class="constant">2</span><span class="plain">)) </span><span class="identifier">i</span><span class="plain"> += </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> == </span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_first_char</a></span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">character_literal_escape</span><span class="plain">)) &amp;&amp; (</span><span class="identifier">q_mode</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">)) </span><span class="identifier">i</span><span class="plain"> += </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_first_char</a></span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="identifier">string_literal</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">q_mode</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">q_mode</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">q_mode</span><span class="plain"> == </span><span class="constant">2</span><span class="plain">) </span><span class="identifier">q_mode</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">q_mode</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_first_char</a></span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="identifier">character_literal</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">q_mode</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">q_mode</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="identifier">q_mode</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) </span><span class="identifier">q_mode</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</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">line</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">multiline_comment_open</span><span class="plain">)) {</span>
<span class="identifier">c_mode</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">; </span><span class="identifier">c_position</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">; </span><span class="identifier">non_white_space</span><span class="plain"> = </span><span class="constant">FALSE</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">pl</span><span class="plain">-&gt;</span><span class="element">multiline_comment_open</span><span class="plain">) - </span><span class="constant">1</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c_mode</span><span class="plain"> == </span><span class="constant">0</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">line</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">line_comment</span><span class="plain">)) {</span>
<span class="identifier">c_mode</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">; </span><span class="identifier">c_position</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">; </span><span class="identifier">c_end</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">line</span><span class="plain">); </span><span class="identifier">non_white_space</span><span class="plain"> = </span><span class="constant">FALSE</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">pl</span><span class="plain">-&gt;</span><span class="element">line_comment</span><span class="plain">) - </span><span class="constant">1</span><span class="plain">;</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">line</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">whole_line_comment</span><span class="plain">)) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">material_exists</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">j</span><span class="plain">=0; </span><span class="identifier">j</span><span class="plain">&lt;</span><span class="identifier">i</span><span class="plain">; </span><span class="identifier">j</span><span class="plain">++)</span>
<span class="reserved">if</span><span class="plain"> (!(</span><span class="functiontext"><a href="4-chr.html#SP2">Characters::is_whitespace</a></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">line</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">))))</span>
<span class="identifier">material_exists</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">material_exists</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) {</span>
<span class="identifier">c_mode</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">; </span><span class="identifier">c_position</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">; </span><span class="identifier">c_end</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">line</span><span class="plain">);</span>
<span class="identifier">non_white_space</span><span class="plain"> = </span><span class="constant">FALSE</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">pl</span><span class="plain">-&gt;</span><span class="element">whole_line_comment</span><span class="plain">) - </span><span class="constant">1</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c_position</span><span class="plain"> &gt;= </span><span class="constant">0</span><span class="plain">) &amp;&amp; (</span><span class="identifier">non_white_space</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">)) {</span>
<span class="functiontext"><a href="4-sm.html#SP15">Str::clear</a></span><span class="plain">(</span><span class="identifier">part_before_comment</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">c_position</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">part_before_comment</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">line</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">));</span>
<span class="functiontext"><a href="4-sm.html#SP15">Str::clear</a></span><span class="plain">(</span><span class="identifier">part_within_comment</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">=</span><span class="identifier">c_position</span><span class="plain"> + </span><span class="constant">2</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">c_end</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">part_within_comment</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">line</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">));</span>
<span class="functiontext"><a href="4-sm.html#SP23">Str::trim_white_space_at_end</a></span><span class="plain">(</span><span class="identifier">part_within_comment</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</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="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::parse_types<button class="popup" onclick="togglePopup('usagePopup164')">...<span class="popuptext" id="usagePopup164">Usage of <b>ACMESupport::parse_types</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</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">if</span><span class="plain"> (</span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">main_language</span><span class="plain">-&gt;</span><span class="element">type_notation</span><span class="plain">[0]) {</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="identifier">LOOP_WITHIN_TANGLE</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="functiontext"><a href="3-tt.html#SP4">Tangler::primary_target</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_language</span><span class="plain"> == </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">main_language</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">L</span><span class="plain">-&gt;</span><span class="element">text</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">main_language</span><span class="plain">-&gt;</span><span class="element">type_notation</span><span class="plain">)) {</span>
<span class="functiontext"><a href="4-taf.html#SP7">Functions::new_function</a></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">L</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext"><a href="4-pm.html#SP9">Regexp::dispose_of</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::parse_functions<button class="popup" onclick="togglePopup('usagePopup165')">...<span class="popuptext" id="usagePopup165">Usage of <b>ACMESupport::parse_functions</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</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">if</span><span class="plain"> (</span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">main_language</span><span class="plain">-&gt;</span><span class="element">function_notation</span><span class="plain">[0]) {</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="identifier">LOOP_WITHIN_TANGLE</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="functiontext"><a href="3-tt.html#SP4">Tangler::primary_target</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_language</span><span class="plain"> == </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">main_language</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="identifier">L</span><span class="plain">-&gt;</span><span class="element">category</span><span class="plain"> != </span><span class="constant">TEXT_EXTRACT_LCAT</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">text</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">main_language</span><span class="plain">-&gt;</span><span class="element">function_notation</span><span class="plain">))) {</span>
<span class="functiontext"><a href="4-taf.html#SP7">Functions::new_function</a></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">L</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext"><a href="4-pm.html#SP9">Regexp::dispose_of</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. </b>This is here so that tangling the Standard Rules extension doesn't insert
a spurious comment betraying Inweb's involvement in the process.
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ACMESupport::suppress_disclaimer<button class="popup" onclick="togglePopup('usagePopup166')">...<span class="popuptext" id="usagePopup166">Usage of <b>ACMESupport::suppress_disclaimer</b>:<br><a href="#SP1">&#167;1</a></span></button></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">return</span><span class="plain"> </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="identifier">suppress_disclaimer</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::begin_weave<button class="popup" onclick="togglePopup('usagePopup167')">...<span class="popuptext" id="usagePopup167">Usage of <b>ACMESupport::begin_weave</b>:<br><a href="#SP1">&#167;1</a></span></button></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">section</span><span class="plain"> *</span><span class="identifier">S</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">reserved_word</span><span class="plain"> *</span><span class="identifier">rw</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">rw</span><span class="plain">, </span><span class="reserved">reserved_word</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">reserved_words</span><span class="plain">)</span>
<span class="functiontext"><a href="3-ta.html#SP10">Analyser::mark_reserved_word_for_section</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">rw</span><span class="plain">-&gt;</span><span class="element">word</span><span class="plain">, </span><span class="identifier">rw</span><span class="plain">-&gt;</span><span class="element">colour</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. </b>ACME has all of its syntax-colouring done by the default engine:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::reset_syntax_colouring<button class="popup" onclick="togglePopup('usagePopup168')">...<span class="popuptext" id="usagePopup168">Usage of <b>ACMESupport::reset_syntax_colouring</b>:<br><a href="#SP1">&#167;1</a></span></button></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="functiontext"><a href="4-tp.html#SP1">Painter::reset_syntax_colouring</a></span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ACMESupport::syntax_colour<button class="popup" onclick="togglePopup('usagePopup169')">...<span class="popuptext" id="usagePopup169">Usage of <b>ACMESupport::syntax_colour</b>:<br><a href="#SP1">&#167;1</a></span></button></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">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">colouring</span><span class="plain">) {</span>
<span class="reserved">hash_table</span><span class="plain"> *</span><span class="identifier">ht</span><span class="plain"> = &amp;(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_target</span><span class="plain">-&gt;</span><span class="element">symbols</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">category</span><span class="plain"> == </span><span class="constant">TEXT_EXTRACT_LCAT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">pl</span><span class="plain"> != </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_language</span><span class="plain">))</span>
<span class="identifier">ht</span><span class="plain"> = &amp;(</span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="identifier">built_in_keywords</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext"><a href="4-tp.html#SP2">Painter::syntax_colour</a></span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="identifier">ht</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="constant">FALSE</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<hr class="tocbar">
<ul class="toc"><li><a href="4-lm.html">Back to 'Language Methods'</a></li><li><a href="4-tp.html">Continue with 'The Painter'</a></li></ul><hr class="tocbar">
<!--End of weave-->
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
</main>
</body>
</html>