Minor improvements to preprocessing
This commit is contained in:
parent
b0e097738d
commit
739b6b8c74
21 changed files with 1777 additions and 1679 deletions
|
@ -12,7 +12,7 @@ void Git::write_gitignore(web *W, filename *prototype, filename *F) {
|
|||
WRITE_TO(header, "# This gitignore was automatically written by inweb -gitignore\n");
|
||||
WRITE_TO(header, "# and is not intended for human editing\n\n");
|
||||
WRITE_TO(STDOUT, "(Read script from %f)\n", prototype);
|
||||
Preprocessor::preprocess(prototype, F, header, L, NULL_GENERAL_POINTER, '#');
|
||||
Preprocessor::preprocess(prototype, F, header, L, NULL_GENERAL_POINTER, '#', ISO_ENC);
|
||||
}
|
||||
|
||||
@ Our one non-standard macro simply includes a file of standing material which
|
||||
|
|
|
@ -41,7 +41,7 @@ void Makefiles::write(web *W, filename *prototype, filename *F, module_search *I
|
|||
WRITE_TO(STDOUT, "(Read script from %f)\n", prototype);
|
||||
|
||||
Preprocessor::preprocess(prototype, F, header, L,
|
||||
STORE_POINTER_makefile_specifics(specifics), '#');
|
||||
STORE_POINTER_makefile_specifics(specifics), '#', ISO_ENC);
|
||||
}
|
||||
|
||||
@ We will allow a makescript to declare "components" (webs, really), so we need
|
||||
|
|
|
@ -14,7 +14,7 @@ void Readme::write(filename *prototype, filename *F) {
|
|||
Readme::bibliographic_expander, NULL);
|
||||
Preprocessor::do_not_suppress_whitespace(mm);
|
||||
WRITE_TO(STDOUT, "(Read script from %f)\n", prototype);
|
||||
Preprocessor::preprocess(prototype, F, NULL, L, NULL_GENERAL_POINTER, '/');
|
||||
Preprocessor::preprocess(prototype, F, NULL, L, NULL_GENERAL_POINTER, '/', ISO_ENC);
|
||||
}
|
||||
|
||||
@ And this is the one domain-specific macro:
|
||||
|
|
|
@ -501,6 +501,11 @@ elaborate makefiles for multi-web projects.
|
|||
(*) Material in balanced braces |{ ... }| is expanded into something more
|
||||
interesting.
|
||||
|
||||
(*) Literal braces can be written with a backslash, |\{| and |\}|, which
|
||||
expand just into |{| and |}|. Literal backslashes are written |\\|, which
|
||||
"expands" to |\|. A backslash is not allowed to precede any other character,
|
||||
so something like |\fish| produces an error message.
|
||||
|
||||
@ Makescripts support variables, whose names have to be in capital letters,
|
||||
perhaps with underscores and digits added. For example:
|
||||
= (text)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Inweb 7.1.0
|
||||
|
||||
v7.1.0-beta+1B11 'Escape to Danger' (16 June 2022)
|
||||
v7.1.0-beta+1B12 'Escape to Danger' (25 July 2022)
|
||||
|
||||
## About Inweb
|
||||
|
||||
|
|
3192
Tangled/inweb.c
3192
Tangled/inweb.c
File diff suppressed because it is too large
Load diff
|
@ -1,3 +1,3 @@
|
|||
Prerelease: beta
|
||||
Build Date: 16 June 2022
|
||||
Build Number: 1B11
|
||||
Build Date: 25 July 2022
|
||||
Build Number: 1B12
|
||||
|
|
|
@ -179,7 +179,7 @@ specify this at three levels of abstraction:
|
|||
<span class="plain-syntax"> </span><a href="3-em.html#SP5" class="function-link"><span class="function-syntax">Errors::in_text_file</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">message</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Errors::in_text_file</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Errors::in_text_file</span></span>:<br/>Command Line Arguments - <a href="3-cla.html#SP11">§11</a><br/>Preprocessor - <a href="4-prp.html#SP3_2_1">§3.2.1</a>, <a href="4-prp.html#SP3_2_2">§3.2.2</a>, <a href="4-prp.html#SP3_2_4">§3.2.4</a>, <a href="4-prp.html#SP4">§4</a>, <a href="4-prp.html#SP4_1_3_1_1">§4.1.3.1.1</a>, <a href="4-prp.html#SP4_1_3_1_3">§4.1.3.1.3</a>, <a href="4-prp.html#SP11">§11</a>, <a href="4-prp.html#SP11_2">§11.2</a>, <a href="4-prp.html#SP12">§12</a>, <a href="4-prp.html#SP16">§16</a>, <a href="4-prp.html#SP18">§18</a><br/>Build Files - <a href="8-bf.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">message</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">here</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Errors::in_text_file</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Errors::in_text_file</span></span>:<br/>Command Line Arguments - <a href="3-cla.html#SP11">§11</a><br/>Preprocessor - <a href="4-prp.html#SP3_2">§3.2</a>, <a href="4-prp.html#SP3_3_1">§3.3.1</a>, <a href="4-prp.html#SP3_3_2">§3.3.2</a>, <a href="4-prp.html#SP3_3_4">§3.3.4</a>, <a href="4-prp.html#SP4">§4</a>, <a href="4-prp.html#SP4_1_3_1_1">§4.1.3.1.1</a>, <a href="4-prp.html#SP4_1_3_1_3">§4.1.3.1.3</a>, <a href="4-prp.html#SP11">§11</a>, <a href="4-prp.html#SP11_2">§11.2</a>, <a href="4-prp.html#SP12">§12</a>, <a href="4-prp.html#SP16">§16</a>, <a href="4-prp.html#SP18">§18</a><br/>Build Files - <a href="8-bf.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">message</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">here</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">here</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="3-em.html#SP6" class="function-link"><span class="function-syntax">Errors::at_position</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">message</span><span class="plain-syntax">, </span><span class="identifier-syntax">here</span><span class="plain-syntax">-></span><span class="element-syntax">text_file_filename</span><span class="plain-syntax">, </span><span class="identifier-syntax">here</span><span class="plain-syntax">-></span><span class="element-syntax">line_count</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
|
||||
|
|
|
@ -76,6 +76,10 @@ function togglePopup(material_id) {
|
|||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::isalnum</span><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">isalnum</span><span class="plain-syntax">((</span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::iscntrl</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Characters::iscntrl</span></span>:<br/>JSON - <a href="4-jsn.html#SP16">§16</a>, <a href="4-jsn.html#SP18">§18</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">c</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">i</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">i</span><span class="plain-syntax"> < </span><span class="constant-syntax">32</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::vowel</span><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'a'</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'e'</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'i'</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'o'</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'u'</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
|
@ -85,11 +89,11 @@ function togglePopup(material_id) {
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::is_space_or_tab</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Characters::is_space_or_tab</span></span>:<br/>Debugging Log - <a href="2-dl.html#SP4_2">§4.2</a><br/>String Manipulation - <a href="4-sm.html#SP16">§16</a>, <a href="4-sm.html#SP23">§23</a>, <a href="4-sm.html#SP24">§24</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::is_space_or_tab</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Characters::is_space_or_tab</span></span>:<br/>Debugging Log - <a href="2-dl.html#SP4_2">§4.2</a><br/>String Manipulation - <a href="4-sm.html#SP16">§16</a>, <a href="4-sm.html#SP23">§23</a>, <a href="4-sm.html#SP24">§24</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">' '</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\t'</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::is_whitespace</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Characters::is_whitespace</span></span>:<br/>Preprocessor - <a href="4-prp.html#SP3_1">§3.1</a>, <a href="4-prp.html#SP4_1_3">§4.1.3</a><br/>Pattern Matching - <a href="4-pm.html#SP13">§13</a><br/>JSON - <a href="4-jsn.html#SP11_1">§11.1</a>, <a href="4-jsn.html#SP12">§12</a>, <a href="4-jsn.html#SP13">§13</a>, <a href="4-jsn.html#SP14">§14</a>, <a href="4-jsn.html#SP15">§15</a>, <a href="4-jsn.html#SP32_2">§32.2</a>, <a href="4-jsn.html#SP33">§33</a>, <a href="4-jsn.html#SP34">§34</a><br/>Web Structure - <a href="8-ws.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::is_whitespace</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Characters::is_whitespace</span></span>:<br/>Preprocessor - <a href="4-prp.html#SP3_1">§3.1</a>, <a href="4-prp.html#SP4_1_3">§4.1.3</a><br/>Pattern Matching - <a href="4-pm.html#SP13">§13</a><br/>JSON - <a href="4-jsn.html#SP11_1">§11.1</a>, <a href="4-jsn.html#SP12">§12</a>, <a href="4-jsn.html#SP13">§13</a>, <a href="4-jsn.html#SP14">§14</a>, <a href="4-jsn.html#SP15">§15</a>, <a href="4-jsn.html#SP32_2">§32.2</a>, <a href="4-jsn.html#SP33">§33</a>, <a href="4-jsn.html#SP34">§34</a><br/>Web Structure - <a href="8-ws.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">' '</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\t'</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\n'</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -100,7 +104,7 @@ iFiction records.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::is_babel_whitespace</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Characters::is_babel_whitespace</span></span>:<br/>String Manipulation - <a href="4-sm.html#SP24">§24</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::is_babel_whitespace</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Characters::is_babel_whitespace</span></span>:<br/>String Manipulation - <a href="4-sm.html#SP24">§24</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">' '</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\t'</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\x0a'</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\x0d'</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="constant-syntax">NEWLINE_IN_STRING</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
|
@ -111,7 +115,7 @@ sufficient correctly to handle all characters in the ZSCII set.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::combine_accent</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Characters::combine_accent</span></span>:<br/>Streams - <a href="2-str.html#SP35">§35</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">accent</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">letter</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::combine_accent</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Characters::combine_accent</span></span>:<br/>Streams - <a href="2-str.html#SP35">§35</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">accent</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">letter</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax">(</span><span class="identifier-syntax">accent</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">0x0300</span><span class="identifier-syntax">:</span><span class="plain-syntax"> </span><span class="comment-syntax"> Unicode combining grave</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax">(</span><span class="identifier-syntax">letter</span><span class="plain-syntax">) {</span>
|
||||
|
@ -181,7 +185,7 @@ the more obvious accents from it.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::remove_accent</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Characters::remove_accent</span></span>:<br/><a href="4-chr.html#SP5">§5</a>, <a href="4-chr.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">charcode</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::remove_accent</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Characters::remove_accent</span></span>:<br/><a href="4-chr.html#SP5">§5</a>, <a href="4-chr.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">charcode</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">charcode</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">0xC0</span><span class="identifier-syntax">:</span><span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">0xC1</span><span class="identifier-syntax">:</span><span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">0xC2</span><span class="identifier-syntax">:</span><span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">0xC3</span><span class="identifier-syntax">:</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">0xC4</span><span class="identifier-syntax">:</span><span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">0xC5</span><span class="identifier-syntax">:</span><span class="plain-syntax"> </span><span class="identifier-syntax">charcode</span><span class="plain-syntax"> = </span><span class="character-syntax">'A'</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
|
@ -208,7 +212,7 @@ the more obvious accents from it.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">charcode</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::remove_wchar_t_accent</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Characters::remove_wchar_t_accent</span></span>:<br/><a href="4-chr.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">charcode</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::remove_wchar_t_accent</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Characters::remove_wchar_t_accent</span></span>:<br/><a href="4-chr.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">charcode</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><a href="4-chr.html#SP6" class="function-link"><span class="function-syntax">Characters::remove_accent</span></a><span class="plain-syntax">((</span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">charcode</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
|
|
@ -322,7 +322,8 @@ the JSON standard), and the special cases <span class="extract"><span class="ext
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">JSON_value</span><span class="plain-syntax"> *</span><span class="function-syntax">JSON::decode_range</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">JSON::decode_range</span></span>:<br/><a href="4-jsn.html#SP10">§10</a>, <a href="4-jsn.html#SP12">§12</a>, <a href="4-jsn.html#SP14">§14</a>, <a href="4-jsn.html#SP32_1">§32.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">first_nws</span><span class="plain-syntax"> = -1, </span><span class="identifier-syntax">last_nws</span><span class="plain-syntax"> = -1, </span><span class="identifier-syntax">first_c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">last_c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">first_nws</span><span class="plain-syntax"> = -1, </span><span class="identifier-syntax">last_nws</span><span class="plain-syntax"> = -1;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">first_c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">last_c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-jsn.html#SP11_1" class="named-paragraph-link"><span class="named-paragraph">Find the first and last non-whitespace character</span><span class="named-paragraph-number">11.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">first_c</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'['</span><span class="plain-syntax">:</span>
|
||||
|
@ -386,7 +387,8 @@ comma before the <span class="extract"><span class="extract-syntax">]</span></sp
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'"'</span><span class="plain-syntax">: </span><span class="identifier-syntax">quoted</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">quoted</span><span class="plain-syntax">)?</span><span class="identifier-syntax">FALSE:TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'\\'</span><span class="plain-syntax">: </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">quoted</span><span class="plain-syntax">) </span><span class="identifier-syntax">i</span><span class="plain-syntax">++; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">','</span><span class="plain-syntax">: </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">first_comma</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">bl</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)) </span><span class="identifier-syntax">first_comma</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">','</span><span class="plain-syntax">: </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">quoted</span><span class="plain-syntax"> == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">) && ((</span><span class="identifier-syntax">first_comma</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">bl</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">first_comma</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'['</span><span class="plain-syntax">: </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'{'</span><span class="plain-syntax">: </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">quoted</span><span class="plain-syntax"> == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">bl</span><span class="plain-syntax">++; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">']'</span><span class="plain-syntax">: </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'}'</span><span class="plain-syntax">: </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">quoted</span><span class="plain-syntax"> == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">bl</span><span class="plain-syntax">--; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -423,7 +425,8 @@ comma before the <span class="extract"><span class="extract-syntax">]</span></sp
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'"'</span><span class="plain-syntax">: </span><span class="identifier-syntax">quoted</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">quoted</span><span class="plain-syntax">)?</span><span class="identifier-syntax">FALSE:TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'\\'</span><span class="plain-syntax">: </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">quoted</span><span class="plain-syntax">) </span><span class="identifier-syntax">i</span><span class="plain-syntax">++; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">','</span><span class="plain-syntax">: </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">first_comma</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">bl</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)) </span><span class="identifier-syntax">first_comma</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">','</span><span class="plain-syntax">: </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">quoted</span><span class="plain-syntax"> == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">) && ((</span><span class="identifier-syntax">first_comma</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">bl</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">first_comma</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'['</span><span class="plain-syntax">: </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'{'</span><span class="plain-syntax">: </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">quoted</span><span class="plain-syntax"> == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">bl</span><span class="plain-syntax">++; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">']'</span><span class="plain-syntax">: </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'}'</span><span class="plain-syntax">: </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">quoted</span><span class="plain-syntax"> == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">bl</span><span class="plain-syntax">--; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -530,7 +533,7 @@ to allow the escaping of forward slash, but the standard requires it.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\\'</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">++;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><a href="4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> < </span><span class="constant-syntax">32</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-jsn.html#SP10" class="function-link"><span class="function-syntax">JSON::decode_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"unescaped control character"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-chr.html#SP1" class="function-link"><span class="function-syntax">Characters::iscntrl</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-jsn.html#SP10" class="function-link"><span class="function-syntax">JSON::decode_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"unescaped control character"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'b'</span><span class="plain-syntax">: </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="constant-syntax">8</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'t'</span><span class="plain-syntax">: </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="constant-syntax">9</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
|
@ -651,7 +654,7 @@ points above 32.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">12</span><span class="plain-syntax">: </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"\\f"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">13</span><span class="plain-syntax">: </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"\\r"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> < </span><span class="constant-syntax">32</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"\\u%04x"</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-chr.html#SP1" class="function-link"><span class="function-syntax">Characters::iscntrl</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"\\u%04x"</span><span class="plain-syntax">, (</span><span class="reserved-syntax">int</span><span class="plain-syntax">)</span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -1124,7 +1127,8 @@ JSON requirement.
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">JSON_requirement</span><span class="plain-syntax"> *</span><span class="function-syntax">JSON::decode_req_range</span><button class="popup" onclick="togglePopup('usagePopup40')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup40">Usage of <span class="code-font"><span class="function-syntax">JSON::decode_req_range</span></span>:<br/><a href="4-jsn.html#SP31">§31</a>, <a href="4-jsn.html#SP33">§33</a>, <a href="4-jsn.html#SP34">§34</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">dictionary</span><span class="plain-syntax"> *</span><span class="identifier-syntax">known_names</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">first_nws</span><span class="plain-syntax"> = -1, </span><span class="identifier-syntax">last_nws</span><span class="plain-syntax"> = -1, </span><span class="identifier-syntax">first_c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">last_c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">first_nws</span><span class="plain-syntax"> = -1, </span><span class="identifier-syntax">last_nws</span><span class="plain-syntax"> = -1;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">first_c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">last_c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-jsn.html#SP32_2" class="named-paragraph-link"><span class="named-paragraph">Find the first and last non-whitespace character in requirement</span><span class="named-paragraph-number">32.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">first_c</span><span class="plain-syntax"> == </span><span class="character-syntax">'('</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">last_c</span><span class="plain-syntax"> != </span><span class="character-syntax">')'</span><span class="plain-syntax">)</span>
|
||||
|
@ -1169,7 +1173,8 @@ for what it's worth, we opt for the value.
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">JSON_single_requirement</span><span class="plain-syntax"> *</span><span class="function-syntax">JSON::decode_sreq_range</span><button class="popup" onclick="togglePopup('usagePopup41')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup41">Usage of <span class="code-font"><span class="function-syntax">JSON::decode_sreq_range</span></span>:<br/><a href="4-jsn.html#SP32">§32</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">dictionary</span><span class="plain-syntax"> *</span><span class="identifier-syntax">known_names</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">first_nws</span><span class="plain-syntax"> = -1, </span><span class="identifier-syntax">last_nws</span><span class="plain-syntax"> = -1, </span><span class="identifier-syntax">first_c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">last_c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">first_nws</span><span class="plain-syntax"> = -1, </span><span class="identifier-syntax">last_nws</span><span class="plain-syntax"> = -1;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">first_c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">last_c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-jsn.html#SP32_2" class="named-paragraph-link"><span class="named-paragraph">Find the first and last non-whitespace character in requirement</span><span class="named-paragraph-number">32.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">first_nws</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-jsn.html#SP27" class="function-link"><span class="function-syntax">JSON::error_sr</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"whitespace where requirement expected"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">first_c</span><span class="plain-syntax">) {</span>
|
||||
|
@ -1277,7 +1282,8 @@ for what it's worth, we opt for the value.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'"'</span><span class="plain-syntax">: </span><span class="identifier-syntax">quoted</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">quoted</span><span class="plain-syntax">)?</span><span class="identifier-syntax">FALSE:TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'\\'</span><span class="plain-syntax">: </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">quoted</span><span class="plain-syntax">) </span><span class="identifier-syntax">i</span><span class="plain-syntax">++; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">','</span><span class="plain-syntax">: </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">first_comma</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">bl</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)) </span><span class="identifier-syntax">first_comma</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">','</span><span class="plain-syntax">: </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">quoted</span><span class="plain-syntax"> == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">) && ((</span><span class="identifier-syntax">first_comma</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">bl</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">first_comma</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'['</span><span class="plain-syntax">: </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'{'</span><span class="plain-syntax">: </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'('</span><span class="plain-syntax">: </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">quoted</span><span class="plain-syntax"> == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">bl</span><span class="plain-syntax">++; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">']'</span><span class="plain-syntax">: </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'}'</span><span class="plain-syntax">: </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">')'</span><span class="plain-syntax">: </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">quoted</span><span class="plain-syntax"> == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">bl</span><span class="plain-syntax">--; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -1315,7 +1321,8 @@ for what it's worth, we opt for the value.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'"'</span><span class="plain-syntax">: </span><span class="identifier-syntax">quoted</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">quoted</span><span class="plain-syntax">)?</span><span class="identifier-syntax">FALSE:TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'\\'</span><span class="plain-syntax">: </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">quoted</span><span class="plain-syntax">) </span><span class="identifier-syntax">i</span><span class="plain-syntax">++; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">','</span><span class="plain-syntax">: </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">first_comma</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">bl</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)) </span><span class="identifier-syntax">first_comma</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">','</span><span class="plain-syntax">: </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">quoted</span><span class="plain-syntax"> == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">) && ((</span><span class="identifier-syntax">first_comma</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">bl</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">first_comma</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'['</span><span class="plain-syntax">: </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'{'</span><span class="plain-syntax">: </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'('</span><span class="plain-syntax">: </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">quoted</span><span class="plain-syntax"> == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">bl</span><span class="plain-syntax">++; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">']'</span><span class="plain-syntax">: </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'}'</span><span class="plain-syntax">: </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">')'</span><span class="plain-syntax">: </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">quoted</span><span class="plain-syntax"> == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">bl</span><span class="plain-syntax">--; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
|
|
@ -204,7 +204,7 @@ deallocate.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">match_results</span><span class="plain-syntax"> </span><span class="function-syntax">Regexp::create_mr</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Regexp::create_mr</span></span>:<br/><a href="4-pm.html#SP14">§14</a><br/>Command Line Arguments - <a href="3-cla.html#SP11">§11</a>, <a href="3-cla.html#SP12">§12</a><br/>Preprocessor - <a href="4-prp.html#SP3_2">§3.2</a>, <a href="4-prp.html#SP4_1">§4.1</a>, <a href="4-prp.html#SP4_1_3_1_1">§4.1.3.1.1</a>, <a href="4-prp.html#SP11_2">§11.2</a>, <a href="4-prp.html#SP17">§17</a><br/>JSON - <a href="4-jsn.html#SP36">§36</a><br/>Web Structure - <a href="8-ws.html#SP7_3_2">§7.3.2</a>, <a href="8-ws.html#SP7_3_3_2">§7.3.3.2</a>, <a href="8-ws.html#SP7_3_3_2_1">§7.3.3.2.1</a>, <a href="8-ws.html#SP7_2_1">§7.2.1</a>, <a href="8-ws.html#SP7_2_2_1">§7.2.2.1</a>, <a href="8-ws.html#SP7_2_2_3">§7.2.2.3</a><br/>Web Modules - <a href="8-wm.html#SP9">§9</a><br/>Build Files - <a href="8-bf.html#SP3">§3</a><br/>Simple Tangler - <a href="8-st.html#SP7_2_3">§7.2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">match_results</span><span class="plain-syntax"> </span><span class="function-syntax">Regexp::create_mr</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Regexp::create_mr</span></span>:<br/><a href="4-pm.html#SP14">§14</a><br/>Command Line Arguments - <a href="3-cla.html#SP11">§11</a>, <a href="3-cla.html#SP12">§12</a><br/>Preprocessor - <a href="4-prp.html#SP3_3">§3.3</a>, <a href="4-prp.html#SP4_1">§4.1</a>, <a href="4-prp.html#SP4_1_3_1_1">§4.1.3.1.1</a>, <a href="4-prp.html#SP11_2">§11.2</a>, <a href="4-prp.html#SP17">§17</a><br/>JSON - <a href="4-jsn.html#SP36">§36</a><br/>Web Structure - <a href="8-ws.html#SP7_3_2">§7.3.2</a>, <a href="8-ws.html#SP7_3_3_2">§7.3.3.2</a>, <a href="8-ws.html#SP7_3_3_2_1">§7.3.3.2.1</a>, <a href="8-ws.html#SP7_2_1">§7.2.1</a>, <a href="8-ws.html#SP7_2_2_1">§7.2.2.1</a>, <a href="8-ws.html#SP7_2_2_3">§7.2.2.3</a><br/>Web Modules - <a href="8-wm.html#SP9">§9</a><br/>Build Files - <a href="8-bf.html#SP3">§3</a><br/>Simple Tangler - <a href="8-st.html#SP7_2_3">§7.2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="element-syntax">no_matched_texts</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><span class="constant-syntax">MAX_BRACKETED_SUBEXPRESSIONS</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
|
||||
|
@ -214,7 +214,7 @@ deallocate.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Regexp::dispose_of</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Regexp::dispose_of</span></span>:<br/><a href="4-pm.html#SP10">§10</a>, <a href="4-pm.html#SP14">§14</a><br/>Command Line Arguments - <a href="3-cla.html#SP11">§11</a><br/>Preprocessor - <a href="4-prp.html#SP3_2">§3.2</a>, <a href="4-prp.html#SP3_2_1">§3.2.1</a>, <a href="4-prp.html#SP3_2_2">§3.2.2</a>, <a href="4-prp.html#SP3_2_3">§3.2.3</a>, <a href="4-prp.html#SP3_2_4">§3.2.4</a>, <a href="4-prp.html#SP4_1">§4.1</a>, <a href="4-prp.html#SP4_1_3_1_1">§4.1.3.1.1</a>, <a href="4-prp.html#SP11_2">§11.2</a>, <a href="4-prp.html#SP17">§17</a><br/>Web Structure - <a href="8-ws.html#SP7_3_2">§7.3.2</a>, <a href="8-ws.html#SP7_3_3_2">§7.3.3.2</a>, <a href="8-ws.html#SP7_3_3_2_1">§7.3.3.2.1</a>, <a href="8-ws.html#SP7_2_1">§7.2.1</a>, <a href="8-ws.html#SP7_2_2_1">§7.2.2.1</a>, <a href="8-ws.html#SP7_2_2_3">§7.2.2.3</a><br/>Web Modules - <a href="8-wm.html#SP9">§9</a><br/>Build Files - <a href="8-bf.html#SP3">§3</a><br/>Simple Tangler - <a href="8-st.html#SP7_2_3">§7.2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">match_results</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mr</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Regexp::dispose_of</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Regexp::dispose_of</span></span>:<br/><a href="4-pm.html#SP10">§10</a>, <a href="4-pm.html#SP14">§14</a><br/>Command Line Arguments - <a href="3-cla.html#SP11">§11</a><br/>Preprocessor - <a href="4-prp.html#SP3_3">§3.3</a>, <a href="4-prp.html#SP3_3_1">§3.3.1</a>, <a href="4-prp.html#SP3_3_2">§3.3.2</a>, <a href="4-prp.html#SP3_3_3">§3.3.3</a>, <a href="4-prp.html#SP3_3_4">§3.3.4</a>, <a href="4-prp.html#SP4_1">§4.1</a>, <a href="4-prp.html#SP4_1_3_1_1">§4.1.3.1.1</a>, <a href="4-prp.html#SP11_2">§11.2</a>, <a href="4-prp.html#SP17">§17</a><br/>Web Structure - <a href="8-ws.html#SP7_3_2">§7.3.2</a>, <a href="8-ws.html#SP7_3_3_2">§7.3.3.2</a>, <a href="8-ws.html#SP7_3_3_2_1">§7.3.3.2.1</a>, <a href="8-ws.html#SP7_2_1">§7.2.1</a>, <a href="8-ws.html#SP7_2_2_1">§7.2.2.1</a>, <a href="8-ws.html#SP7_2_2_3">§7.2.2.3</a><br/>Web Modules - <a href="8-wm.html#SP9">§9</a><br/>Build Files - <a href="8-bf.html#SP3">§3</a><br/>Simple Tangler - <a href="8-st.html#SP7_2_3">§7.2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">match_results</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mr</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">mr</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><span class="constant-syntax">MAX_BRACKETED_SUBEXPRESSIONS</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">mr</span><span class="plain-syntax">-></span><span class="element-syntax">exp</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]) {</span>
|
||||
|
@ -229,7 +229,7 @@ deallocate.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Regexp::match</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Regexp::match</span></span>:<br/>Command Line Arguments - <a href="3-cla.html#SP11">§11</a>, <a href="3-cla.html#SP12">§12</a><br/>Preprocessor - <a href="4-prp.html#SP3_2">§3.2</a>, <a href="4-prp.html#SP4_1">§4.1</a>, <a href="4-prp.html#SP4_1_3_1_1">§4.1.3.1.1</a>, <a href="4-prp.html#SP11_2">§11.2</a>, <a href="4-prp.html#SP17">§17</a><br/>JSON - <a href="4-jsn.html#SP36">§36</a><br/>Web Structure - <a href="8-ws.html#SP7_3_2">§7.3.2</a>, <a href="8-ws.html#SP7_3_3_2">§7.3.3.2</a>, <a href="8-ws.html#SP7_3_3_2_1">§7.3.3.2.1</a>, <a href="8-ws.html#SP7_2_1">§7.2.1</a>, <a href="8-ws.html#SP7_2_2_1">§7.2.2.1</a>, <a href="8-ws.html#SP7_2_2_3">§7.2.2.3</a><br/>Web Modules - <a href="8-wm.html#SP9">§9</a><br/>Build Files - <a href="8-bf.html#SP3">§3</a><br/>Simple Tangler - <a href="8-st.html#SP7_2_3">§7.2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">match_results</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pattern</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Regexp::match</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Regexp::match</span></span>:<br/>Command Line Arguments - <a href="3-cla.html#SP11">§11</a>, <a href="3-cla.html#SP12">§12</a><br/>Preprocessor - <a href="4-prp.html#SP3_3">§3.3</a>, <a href="4-prp.html#SP4_1">§4.1</a>, <a href="4-prp.html#SP4_1_3_1_1">§4.1.3.1.1</a>, <a href="4-prp.html#SP11_2">§11.2</a>, <a href="4-prp.html#SP17">§17</a><br/>JSON - <a href="4-jsn.html#SP36">§36</a><br/>Web Structure - <a href="8-ws.html#SP7_3_2">§7.3.2</a>, <a href="8-ws.html#SP7_3_3_2">§7.3.3.2</a>, <a href="8-ws.html#SP7_3_3_2_1">§7.3.3.2.1</a>, <a href="8-ws.html#SP7_2_1">§7.2.1</a>, <a href="8-ws.html#SP7_2_2_1">§7.2.2.1</a>, <a href="8-ws.html#SP7_2_2_3">§7.2.2.3</a><br/>Web Modules - <a href="8-wm.html#SP9">§9</a><br/>Build Files - <a href="8-bf.html#SP3">§3</a><br/>Simple Tangler - <a href="8-st.html#SP7_2_3">§7.2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">match_results</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pattern</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">mr</span><span class="plain-syntax">) </span><a href="4-pm.html#SP10" class="function-link"><span class="function-syntax">Regexp::prepare</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rv</span><span class="plain-syntax"> = (</span><a href="4-pm.html#SP11" class="function-link"><span class="function-syntax">Regexp::match_r</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">pattern</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">) >= </span><span class="constant-syntax">0</span><span class="plain-syntax">)?</span><span class="identifier-syntax">TRUE:FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">mr</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">rv</span><span class="plain-syntax"> == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">)) </span><a href="4-pm.html#SP9" class="function-link"><span class="function-syntax">Regexp::dispose_of</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -64,19 +64,25 @@ saves us having to have dependencies on behemoths like the mighty <span class="e
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="function-syntax">Preprocessor::preprocess</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">to</span><span class="plain-syntax">, </span><span class="identifier-syntax">header</span><span class="plain-syntax">, </span><span class="identifier-syntax">special_macros</span><span class="plain-syntax">, </span><span class="identifier-syntax">specifics</span><span class="plain-syntax">)</span>
|
||||
<span class="function-syntax">Preprocessor::preprocess</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">to</span><span class="plain-syntax">, </span><span class="identifier-syntax">header</span><span class="plain-syntax">, </span><span class="identifier-syntax">special_macros</span><span class="plain-syntax">, </span><span class="identifier-syntax">specifics</span><span class="plain-syntax">, </span><span class="identifier-syntax">encoding</span><span class="plain-syntax">)</span>
|
||||
</pre>
|
||||
<p class="commentary">where <span class="extract"><span class="extract-syntax">from</span></span> and <span class="extract"><span class="extract-syntax">to</span></span> are filenames, <span class="extract"><span class="extract-syntax">header</span></span> is text to place at the top of
|
||||
the file (if any), <span class="extract"><span class="extract-syntax">special_macros</span></span> is a <span class="extract"><span class="extract-syntax">linked_list</span></span> of <span class="extract"><span class="extract-syntax">preprocessor_macro</span></span>s
|
||||
set up with special meanings to the situation, and <span class="extract"><span class="extract-syntax">specifics</span></span> is a general
|
||||
pointer to any data those special meanings need to use.
|
||||
pointer to any data those special meanings need to use. <span class="extract"><span class="extract-syntax">encoding</span></span> should be
|
||||
one of <span class="extract"><span class="extract-syntax">UTF8_ENC</span></span> or <span class="extract"><span class="extract-syntax">ISO_ENC</span></span>.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">PROTECTED_OPEN_BRACE_PPCHAR</span><span class="plain-syntax"> </span><span class="constant-syntax">0x25A0</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">PROTECTED_CLOSE_BRACE_PPCHAR</span><span class="plain-syntax"> </span><span class="constant-syntax">0x25A1</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">PROTECTED_BLANK_PPCHAR</span><span class="plain-syntax"> </span><span class="constant-syntax">0x25A2</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Preprocessor::preprocess</span><span class="plain-syntax">(</span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prototype</span><span class="plain-syntax">, </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">header</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">special_macros</span><span class="plain-syntax">, </span><span class="reserved-syntax">general_pointer</span><span class="plain-syntax"> </span><span class="identifier-syntax">specifics</span><span class="plain-syntax">, </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">comment_char</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">special_macros</span><span class="plain-syntax">, </span><span class="reserved-syntax">general_pointer</span><span class="plain-syntax"> </span><span class="identifier-syntax">specifics</span><span class="plain-syntax">, </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">comment_char</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">encoding</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> </span><span class="identifier-syntax">processed_file</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">STREAM_OPEN_TO_FILE</span><span class="plain-syntax">(&</span><span class="identifier-syntax">processed_file</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="constant-syntax">ISO_ENC</span><span class="plain-syntax">) == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">STREAM_OPEN_TO_FILE</span><span class="plain-syntax">(&</span><span class="identifier-syntax">processed_file</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">encoding</span><span class="plain-syntax">) == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="3-em.html#SP2" class="function-link"><span class="function-syntax">Errors::fatal_with_file</span></a><span class="plain-syntax">(</span><span class="string-syntax">"unable to write tangled file"</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = &</span><span class="identifier-syntax">processed_file</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">header</span><span class="plain-syntax">);</span>
|
||||
|
@ -85,6 +91,12 @@ pointer to any data those special meanings need to use.
|
|||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prp.html#SP1_2" class="named-paragraph-link"><span class="named-paragraph">Initialise the preprocessor state</span><span class="named-paragraph-number">1.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="4-tf.html#SP5" class="function-link"><span class="function-syntax">TextFiles::read</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prototype</span><span class="plain-syntax">, </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"can't open prototype file"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">, </span><a href="4-prp.html#SP3" class="function-link"><span class="function-syntax">Preprocessor::scan_line</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, &</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><a href="4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">.</span><span class="identifier-syntax">dest</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><a href="4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">.</span><span class="element-syntax">dest</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="constant-syntax">PROTECTED_OPEN_BRACE_PPCHAR</span><span class="plain-syntax">) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">(</span><span class="character-syntax">'{'</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="constant-syntax">PROTECTED_CLOSE_BRACE_PPCHAR</span><span class="plain-syntax">) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">(</span><span class="character-syntax">'}'</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> != </span><span class="constant-syntax">PROTECTED_BLANK_PPCHAR</span><span class="plain-syntax">) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">STREAM_CLOSE</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -122,7 +134,7 @@ the prototype file line-by-line:
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PPS</span><span class="plain-syntax">.</span><span class="element-syntax">dest</span><span class="plain-syntax"> = </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PPS</span><span class="plain-syntax">.</span><span class="element-syntax">dest</span><span class="plain-syntax"> = </span><a href="4-sm.html#SP2" class="function-link"><span class="function-syntax">Str::new</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PPS</span><span class="plain-syntax">.</span><span class="element-syntax">suppress_newline</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PPS</span><span class="plain-syntax">.</span><span class="element-syntax">last_line_was_blank</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PPS</span><span class="plain-syntax">.</span><span class="element-syntax">defining</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
|
@ -160,9 +172,10 @@ parametrised names: but then, nor should you.
|
|||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Preprocessor::scan_line</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Preprocessor::scan_line</span></span>:<br/><a href="4-prp.html#SP1">§1</a>, <a href="4-prp.html#SP15">§15</a>, <a href="4-prp.html#SP18_1">§18.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">preprocessor_state</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">X</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prp.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Skip comments</span><span class="named-paragraph-number">3.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prp.html#SP3_2" class="named-paragraph-link"><span class="named-paragraph">Deal with textual definitions of new macros</span><span class="named-paragraph-number">3.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prp.html#SP3_2" class="named-paragraph-link"><span class="named-paragraph">Make backslash literals safe</span><span class="named-paragraph-number">3.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prp.html#SP3_3" class="named-paragraph-link"><span class="named-paragraph">Deal with textual definitions of new macros</span><span class="named-paragraph-number">3.3</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="4-prp.html#SP4" class="function-link"><span class="function-syntax">Preprocessor::expand</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">, </span><span class="identifier-syntax">PPS</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prp.html#SP3_3" class="named-paragraph-link"><span class="named-paragraph">Sometimes, but only sometimes, output a newline</span><span class="named-paragraph-number">3.3</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prp.html#SP3_4" class="named-paragraph-link"><span class="named-paragraph">Sometimes, but only sometimes, output a newline</span><span class="named-paragraph-number">3.4</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3_1" class="paragraph-anchor"></a><b>§3.1. </b>A line is a comment to the preprocessor if its first non-whitespace character
|
||||
|
@ -180,19 +193,47 @@ is the special comment character: often <span class="extract"><span class="extra
|
|||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-prp.html#SP3">§3</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3_2" class="paragraph-anchor"></a><b>§3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Deal with textual definitions of new macros</span><span class="named-paragraph-number">3.2</span></span><span class="comment-syntax"> =</span>
|
||||
<p class="commentary firstcommentary"><a id="SP3_2" class="paragraph-anchor"></a><b>§3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make backslash literals safe</span><span class="named-paragraph-number">3.2</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax"> < </span><a href="4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><a href="4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\\'</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">d</span><span class="plain-syntax"> = </span><a href="4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">+1);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">d</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'{'</span><span class="plain-syntax">:</span>
|
||||
<span class="plain-syntax"> </span><a href="4-sm.html#SP14" class="function-link"><span class="function-syntax">Str::put_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="constant-syntax">PROTECTED_OPEN_BRACE_PPCHAR</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="4-sm.html#SP14" class="function-link"><span class="function-syntax">Str::put_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">+1, </span><span class="constant-syntax">PROTECTED_BLANK_PPCHAR</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'}'</span><span class="plain-syntax">:</span>
|
||||
<span class="plain-syntax"> </span><a href="4-sm.html#SP14" class="function-link"><span class="function-syntax">Str::put_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="constant-syntax">PROTECTED_CLOSE_BRACE_PPCHAR</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="4-sm.html#SP14" class="function-link"><span class="function-syntax">Str::put_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">+1, </span><span class="constant-syntax">PROTECTED_BLANK_PPCHAR</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'\\'</span><span class="plain-syntax">:</span>
|
||||
<span class="plain-syntax"> </span><a href="4-sm.html#SP14" class="function-link"><span class="function-syntax">Str::put_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">+1, </span><span class="constant-syntax">PROTECTED_BLANK_PPCHAR</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span>
|
||||
<span class="plain-syntax"> </span><a href="3-em.html#SP5" class="function-link"><span class="function-syntax">Errors::in_text_file</span></a><span class="plain-syntax">(</span><span class="string-syntax">"backslash '\\' must be followed by '{', '}' or '\\'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-prp.html#SP3">§3</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3_3" class="paragraph-anchor"></a><b>§3.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Deal with textual definitions of new macros</span><span class="named-paragraph-number">3.3</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><a href="4-pm.html#SP9" class="function-link"><span class="function-syntax">Regexp::create_mr</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-pm.html#SP10" class="function-link"><span class="function-syntax">Regexp::match</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">" *{define: *(%C+) *} *"</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="4-prp.html#SP3_2_1" class="named-paragraph-link"><span class="named-paragraph">Begin a bare definition</span><span class="named-paragraph-number">3.2.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-pm.html#SP10" class="function-link"><span class="function-syntax">Regexp::match</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">" *{define: *(%C+) (%c*)} *"</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="4-prp.html#SP3_2_2" class="named-paragraph-link"><span class="named-paragraph">Begin a definition</span><span class="named-paragraph-number">3.2.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-pm.html#SP10" class="function-link"><span class="function-syntax">Regexp::match</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">" *{end-define} *"</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="4-prp.html#SP3_2_4" class="named-paragraph-link"><span class="named-paragraph">End a definition</span><span class="named-paragraph-number">3.2.4</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="element-syntax">defining</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-prp.html#SP3_2_3" class="named-paragraph-link"><span class="named-paragraph">Continue a definition</span><span class="named-paragraph-number">3.2.3</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-pm.html#SP10" class="function-link"><span class="function-syntax">Regexp::match</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">" *{define: *(%C+) *} *"</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="4-prp.html#SP3_3_1" class="named-paragraph-link"><span class="named-paragraph">Begin a bare definition</span><span class="named-paragraph-number">3.3.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-pm.html#SP10" class="function-link"><span class="function-syntax">Regexp::match</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">" *{define: *(%C+) (%c*)} *"</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="4-prp.html#SP3_3_2" class="named-paragraph-link"><span class="named-paragraph">Begin a definition</span><span class="named-paragraph-number">3.3.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-pm.html#SP10" class="function-link"><span class="function-syntax">Regexp::match</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">" *{end-define} *"</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="4-prp.html#SP3_3_4" class="named-paragraph-link"><span class="named-paragraph">End a definition</span><span class="named-paragraph-number">3.3.4</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="element-syntax">defining</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-prp.html#SP3_3_3" class="named-paragraph-link"><span class="named-paragraph">Continue a definition</span><span class="named-paragraph-number">3.3.3</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="4-pm.html#SP9" class="function-link"><span class="function-syntax">Regexp::dispose_of</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-prp.html#SP3">§3</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3_2_1" class="paragraph-anchor"></a><b>§3.2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin a bare definition</span><span class="named-paragraph-number">3.2.1</span></span><span class="comment-syntax"> =</span>
|
||||
<p class="commentary firstcommentary"><a id="SP3_3_1" class="paragraph-anchor"></a><b>§3.3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin a bare definition</span><span class="named-paragraph-number">3.3.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -205,8 +246,8 @@ is the special comment character: often <span class="extract"><span class="extra
|
|||
<span class="plain-syntax"> </span><a href="4-pm.html#SP9" class="function-link"><span class="function-syntax">Regexp::dispose_of</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-prp.html#SP3_2">§3.2</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3_2_2" class="paragraph-anchor"></a><b>§3.2.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin a definition</span><span class="named-paragraph-number">3.2.2</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-prp.html#SP3_3">§3.3</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3_3_2" class="paragraph-anchor"></a><b>§3.3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Begin a definition</span><span class="named-paragraph-number">3.3.2</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -219,8 +260,8 @@ is the special comment character: often <span class="extract"><span class="extra
|
|||
<span class="plain-syntax"> </span><a href="4-pm.html#SP9" class="function-link"><span class="function-syntax">Regexp::dispose_of</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-prp.html#SP3_2">§3.2</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3_2_3" class="paragraph-anchor"></a><b>§3.2.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Continue a definition</span><span class="named-paragraph-number">3.2.3</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-prp.html#SP3_3">§3.3</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3_3_3" class="paragraph-anchor"></a><b>§3.3.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Continue a definition</span><span class="named-paragraph-number">3.3.3</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -228,8 +269,8 @@ is the special comment character: often <span class="extract"><span class="extra
|
|||
<span class="plain-syntax"> </span><a href="4-pm.html#SP9" class="function-link"><span class="function-syntax">Regexp::dispose_of</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-prp.html#SP3_2">§3.2</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3_2_4" class="paragraph-anchor"></a><b>§3.2.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">End a definition</span><span class="named-paragraph-number">3.2.4</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-prp.html#SP3_3">§3.3</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3_3_4" class="paragraph-anchor"></a><b>§3.3.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">End a definition</span><span class="named-paragraph-number">3.3.4</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -239,8 +280,8 @@ is the special comment character: often <span class="extract"><span class="extra
|
|||
<span class="plain-syntax"> </span><a href="4-pm.html#SP9" class="function-link"><span class="function-syntax">Regexp::dispose_of</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-prp.html#SP3_2">§3.2</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3_3" class="paragraph-anchor"></a><b>§3.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Sometimes, but only sometimes, output a newline</span><span class="named-paragraph-number">3.3</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-prp.html#SP3_3">§3.3</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3_4" class="paragraph-anchor"></a><b>§3.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Sometimes, but only sometimes, output a newline</span><span class="named-paragraph-number">3.4</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -264,7 +305,7 @@ is the special comment character: often <span class="extract"><span class="extra
|
|||
</li><li>(ii) Contains braces <span class="extract"><span class="extract-syntax">{ ... }</span></span> used in nested pairs (unless there is a syntax
|
||||
error in the prototype, in which case we must complain).
|
||||
</li></ul>
|
||||
<p class="commentary">The idea is the pass everything straight through except any braced matter,
|
||||
<p class="commentary">The idea is to pass everything straight through except any braced matter,
|
||||
which needs special attention.
|
||||
</p>
|
||||
|
||||
|
@ -710,7 +751,7 @@ fact we expect more like 10.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="function-syntax">Preprocessor::new_macro</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Preprocessor::new_macro</span></span>:<br/><a href="4-prp.html#SP3_2_1">§3.2.1</a>, <a href="4-prp.html#SP3_2_2">§3.2.2</a>, <a href="4-prp.html#SP13">§13</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">,</span>
|
||||
<span class="reserved-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="function-syntax">Preprocessor::new_macro</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Preprocessor::new_macro</span></span>:<br/><a href="4-prp.html#SP3_3_1">§3.3.1</a>, <a href="4-prp.html#SP3_3_2">§3.3.2</a>, <a href="4-prp.html#SP13">§13</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">parameter_specification</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">expander</span><span class="plain-syntax">)(</span><span class="reserved-syntax">preprocessor_macro</span><span class="plain-syntax"> *, </span><span class="reserved-syntax">preprocessor_state</span><span class="plain-syntax"> *, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> **, </span><span class="reserved-syntax">preprocessor_loop</span><span class="plain-syntax"> *, </span><span class="reserved-syntax">text_file_position</span><span class="plain-syntax"> *),</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
|
||||
|
@ -783,7 +824,7 @@ expander function is <a href="4-prp.html#SP15" class="internal">Preprocessor::de
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Preprocessor::add_line_to_macro</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Preprocessor::add_line_to_macro</span></span>:<br/><a href="4-prp.html#SP3_2_3">§3.2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">line</span><span class="plain-syntax">,</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Preprocessor::add_line_to_macro</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Preprocessor::add_line_to_macro</span></span>:<br/><a href="4-prp.html#SP3_3_3">§3.3.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">line</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">mm</span><span class="plain-syntax">-></span><span class="element-syntax">no_lines</span><span class="plain-syntax"> >= </span><span class="constant-syntax">MAX_PP_MACRO_LINES</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="3-em.html#SP5" class="function-link"><span class="function-syntax">Errors::in_text_file</span></a><span class="plain-syntax">(</span><span class="string-syntax">"too many lines in this definition"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
|
||||
|
@ -875,7 +916,7 @@ frame again.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Preprocessor::default_expander</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Preprocessor::default_expander</span></span>:<br/><a href="4-prp.html#SP3_2_1">§3.2.1</a>, <a href="4-prp.html#SP3_2_2">§3.2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="reserved-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">,</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Preprocessor::default_expander</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Preprocessor::default_expander</span></span>:<br/><a href="4-prp.html#SP3_3_1">§3.3.1</a>, <a href="4-prp.html#SP3_3_2">§3.3.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="reserved-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> **</span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">, </span><span class="reserved-syntax">preprocessor_loop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">loop</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="element-syntax">stack_frame</span><span class="plain-syntax"> = </span><a href="4-prp.html#SP7" class="function-link"><span class="function-syntax">Preprocessor::new_variable_set</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-></span><span class="element-syntax">stack_frame</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax"><mm-></span><span class="element-syntax">no_parameters</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
|
||||
|
|
|
@ -88,7 +88,7 @@ access.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Str::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Str::new</span></span>:<br/><a href="4-sm.html#SP3">§3</a><br/>Debugging Log - <a href="2-dl.html#SP4_1">§4.1</a><br/>Dictionaries - <a href="2-dct.html#SP7_3_1">§7.3.1</a><br/>Command Line Arguments - <a href="3-cla.html#SP6">§6</a>, <a href="3-cla.html#SP11">§11</a><br/>Directories - <a href="3-drc.html#SP4">§4</a><br/>Preprocessor - <a href="4-prp.html#SP3_2_1">§3.2.1</a>, <a href="4-prp.html#SP4_1_3_1_1">§4.1.3.1.1</a>, <a href="4-prp.html#SP4_1_3_1_3">§4.1.3.1.3</a><br/>JSON - <a href="4-jsn.html#SP28">§28</a>, <a href="4-jsn.html#SP32_1">§32.1</a>, <a href="4-jsn.html#SP36">§36</a><br/>HTML - <a href="5-htm.html#SP28_2">§28.2</a><br/>Epub Ebooks - <a href="5-ee.html#SP5">§5</a><br/>Version Numbers - <a href="7-vn.html#SP7">§7</a><br/>Web Structure - <a href="8-ws.html#SP5_2">§5.2</a>, <a href="8-ws.html#SP6_1">§6.1</a>, <a href="8-ws.html#SP7_2_1">§7.2.1</a>, <a href="8-ws.html#SP7_2_2_1">§7.2.2.1</a><br/>Build Files - <a href="8-bf.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Str::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Str::new</span></span>:<br/><a href="4-sm.html#SP3">§3</a><br/>Debugging Log - <a href="2-dl.html#SP4_1">§4.1</a><br/>Dictionaries - <a href="2-dct.html#SP7_3_1">§7.3.1</a><br/>Command Line Arguments - <a href="3-cla.html#SP6">§6</a>, <a href="3-cla.html#SP11">§11</a><br/>Directories - <a href="3-drc.html#SP4">§4</a><br/>Preprocessor - <a href="4-prp.html#SP1_2">§1.2</a>, <a href="4-prp.html#SP3_3_1">§3.3.1</a>, <a href="4-prp.html#SP4_1_3_1_1">§4.1.3.1.1</a>, <a href="4-prp.html#SP4_1_3_1_3">§4.1.3.1.3</a><br/>JSON - <a href="4-jsn.html#SP28">§28</a>, <a href="4-jsn.html#SP32_1">§32.1</a>, <a href="4-jsn.html#SP36">§36</a><br/>HTML - <a href="5-htm.html#SP28_2">§28.2</a><br/>Epub Ebooks - <a href="5-ee.html#SP5">§5</a><br/>Version Numbers - <a href="7-vn.html#SP7">§7</a><br/>Web Structure - <a href="8-ws.html#SP5_2">§5.2</a>, <a href="8-ws.html#SP6_1">§6.1</a>, <a href="8-ws.html#SP7_2_1">§7.2.1</a>, <a href="8-ws.html#SP7_2_2_1">§7.2.2.1</a><br/>Build Files - <a href="8-bf.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-sm.html#SP2" class="function-link"><span class="function-syntax">Str::new_with_capacity</span></a><span class="plain-syntax">(32);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
|
@ -198,7 +198,7 @@ thing plus a little extra, for efficiency's sake.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Str::len</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Str::len</span></span>:<br/><a href="4-sm.html#SP3">§3</a>, <a href="4-sm.html#SP7">§7</a>, <a href="4-sm.html#SP10">§10</a>, <a href="4-sm.html#SP11">§11</a>, <a href="4-sm.html#SP12">§12</a>, <a href="4-sm.html#SP13">§13</a>, <a href="4-sm.html#SP14">§14</a>, <a href="4-sm.html#SP15">§15</a>, <a href="4-sm.html#SP17">§17</a>, <a href="4-sm.html#SP19">§19</a>, <a href="4-sm.html#SP20">§20</a>, <a href="4-sm.html#SP21">§21</a>, <a href="4-sm.html#SP22">§22</a>, <a href="4-sm.html#SP24">§24</a>, <a href="4-sm.html#SP25">§25</a>, <a href="4-sm.html#SP26">§26</a><br/>Debugging Log - <a href="2-dl.html#SP9">§9</a><br/>Command Line Arguments - <a href="3-cla.html#SP13">§13</a>, <a href="3-cla.html#SP14">§14</a>, <a href="3-cla.html#SP14_1">§14.1</a><br/>Pathnames - <a href="3-pth.html#SP4">§4</a>, <a href="3-pth.html#SP5">§5</a>, <a href="3-pth.html#SP7">§7</a>, <a href="3-pth.html#SP8">§8</a><br/>Filenames - <a href="3-fln.html#SP2">§2</a>, <a href="3-fln.html#SP3">§3</a>, <a href="3-fln.html#SP5">§5</a>, <a href="3-fln.html#SP8">§8</a>, <a href="3-fln.html#SP9">§9</a><br/>Preprocessor - <a href="4-prp.html#SP3_3">§3.3</a>, <a href="4-prp.html#SP4">§4</a>, <a href="4-prp.html#SP4_1_1">§4.1.1</a><br/>Tries and Avinues - <a href="4-taa.html#SP2_1">§2.1</a><br/>Pattern Matching - <a href="4-pm.html#SP3">§3</a>, <a href="4-pm.html#SP4">§4</a>, <a href="4-pm.html#SP10">§10</a>, <a href="4-pm.html#SP11_3">§11.3</a>, <a href="4-pm.html#SP14">§14</a><br/>JSON - <a href="4-jsn.html#SP10">§10</a>, <a href="4-jsn.html#SP28">§28</a>, <a href="4-jsn.html#SP31">§31</a>, <a href="4-jsn.html#SP36">§36</a>, <a href="4-jsn.html#SP37">§37</a><br/>HTML - <a href="5-htm.html#SP8">§8</a>, <a href="5-htm.html#SP17">§17</a>, <a href="5-htm.html#SP20">§20</a>, <a href="5-htm.html#SP26">§26</a><br/>Epub Ebooks - <a href="5-ee.html#SP7_1">§7.1</a>, <a href="5-ee.html#SP7_2_3">§7.2.3</a>, <a href="5-ee.html#SP7_2_4">§7.2.4</a><br/>Version Numbers - <a href="7-vn.html#SP7">§7</a>, <a href="7-vn.html#SP7_1">§7.1</a>, <a href="7-vn.html#SP10">§10</a><br/>Web Structure - <a href="8-ws.html#SP5_4">§5.4</a>, <a href="8-ws.html#SP5_4_1">§5.4.1</a>, <a href="8-ws.html#SP5_4_1_1">§5.4.1.1</a>, <a href="8-ws.html#SP5_4_1_2">§5.4.1.2</a>, <a href="8-ws.html#SP7_3">§7.3</a>, <a href="8-ws.html#SP7_3_3_1">§7.3.3.1</a>, <a href="8-ws.html#SP7_2_2_3_1">§7.2.2.3.1</a>, <a href="8-ws.html#SP7_2_2_4">§7.2.2.4</a><br/>Bibliographic Data for Webs - <a href="8-bdfw.html#SP5">§5</a>, <a href="8-bdfw.html#SP6">§6</a><br/>Build Files - <a href="8-bf.html#SP3">§3</a>, <a href="8-bf.html#SP4">§4</a>, <a href="8-bf.html#SP5">§5</a>, <a href="8-bf.html#SP6">§6</a>, <a href="8-bf.html#SP9">§9</a><br/>Simple Tangler - <a href="8-st.html#SP7">§7</a>, <a href="8-st.html#SP7_1">§7.1</a>, <a href="8-st.html#SP7_2_4">§7.2.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Str::len</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Str::len</span></span>:<br/><a href="4-sm.html#SP3">§3</a>, <a href="4-sm.html#SP7">§7</a>, <a href="4-sm.html#SP10">§10</a>, <a href="4-sm.html#SP11">§11</a>, <a href="4-sm.html#SP12">§12</a>, <a href="4-sm.html#SP13">§13</a>, <a href="4-sm.html#SP14">§14</a>, <a href="4-sm.html#SP15">§15</a>, <a href="4-sm.html#SP17">§17</a>, <a href="4-sm.html#SP19">§19</a>, <a href="4-sm.html#SP20">§20</a>, <a href="4-sm.html#SP21">§21</a>, <a href="4-sm.html#SP22">§22</a>, <a href="4-sm.html#SP24">§24</a>, <a href="4-sm.html#SP25">§25</a>, <a href="4-sm.html#SP26">§26</a><br/>Debugging Log - <a href="2-dl.html#SP9">§9</a><br/>Command Line Arguments - <a href="3-cla.html#SP13">§13</a>, <a href="3-cla.html#SP14">§14</a>, <a href="3-cla.html#SP14_1">§14.1</a><br/>Pathnames - <a href="3-pth.html#SP4">§4</a>, <a href="3-pth.html#SP5">§5</a>, <a href="3-pth.html#SP7">§7</a>, <a href="3-pth.html#SP8">§8</a><br/>Filenames - <a href="3-fln.html#SP2">§2</a>, <a href="3-fln.html#SP3">§3</a>, <a href="3-fln.html#SP5">§5</a>, <a href="3-fln.html#SP8">§8</a>, <a href="3-fln.html#SP9">§9</a><br/>Preprocessor - <a href="4-prp.html#SP1">§1</a>, <a href="4-prp.html#SP3_2">§3.2</a>, <a href="4-prp.html#SP3_4">§3.4</a>, <a href="4-prp.html#SP4">§4</a>, <a href="4-prp.html#SP4_1_1">§4.1.1</a><br/>Tries and Avinues - <a href="4-taa.html#SP2_1">§2.1</a><br/>Pattern Matching - <a href="4-pm.html#SP3">§3</a>, <a href="4-pm.html#SP4">§4</a>, <a href="4-pm.html#SP10">§10</a>, <a href="4-pm.html#SP11_3">§11.3</a>, <a href="4-pm.html#SP14">§14</a><br/>JSON - <a href="4-jsn.html#SP10">§10</a>, <a href="4-jsn.html#SP28">§28</a>, <a href="4-jsn.html#SP31">§31</a>, <a href="4-jsn.html#SP36">§36</a>, <a href="4-jsn.html#SP37">§37</a><br/>HTML - <a href="5-htm.html#SP8">§8</a>, <a href="5-htm.html#SP17">§17</a>, <a href="5-htm.html#SP20">§20</a>, <a href="5-htm.html#SP26">§26</a><br/>Epub Ebooks - <a href="5-ee.html#SP7_1">§7.1</a>, <a href="5-ee.html#SP7_2_3">§7.2.3</a>, <a href="5-ee.html#SP7_2_4">§7.2.4</a><br/>Version Numbers - <a href="7-vn.html#SP7">§7</a>, <a href="7-vn.html#SP7_1">§7.1</a>, <a href="7-vn.html#SP10">§10</a><br/>Web Structure - <a href="8-ws.html#SP5_4">§5.4</a>, <a href="8-ws.html#SP5_4_1">§5.4.1</a>, <a href="8-ws.html#SP5_4_1_1">§5.4.1.1</a>, <a href="8-ws.html#SP5_4_1_2">§5.4.1.2</a>, <a href="8-ws.html#SP7_3">§7.3</a>, <a href="8-ws.html#SP7_3_3_1">§7.3.3.1</a>, <a href="8-ws.html#SP7_2_2_3_1">§7.2.2.3.1</a>, <a href="8-ws.html#SP7_2_2_4">§7.2.2.4</a><br/>Bibliographic Data for Webs - <a href="8-bdfw.html#SP5">§5</a>, <a href="8-bdfw.html#SP6">§6</a><br/>Build Files - <a href="8-bf.html#SP3">§3</a>, <a href="8-bf.html#SP4">§4</a>, <a href="8-bf.html#SP5">§5</a>, <a href="8-bf.html#SP6">§6</a>, <a href="8-bf.html#SP9">§9</a><br/>Simple Tangler - <a href="8-st.html#SP7">§7</a>, <a href="8-st.html#SP7_1">§7.1</a>, <a href="8-st.html#SP7_2_4">§7.2.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-str.html#SP38" class="function-link"><span class="function-syntax">Streams::get_position</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -282,7 +282,7 @@ at those positions may well not be, of course.)
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-str.html#SP40" class="function-link"><span class="function-syntax">Streams::get_char_at_index</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">.</span><span class="element-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">.</span><span class="element-syntax">index</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="function-syntax">Str::get_at</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Str::get_at</span></span>:<br/><a href="4-sm.html#SP20">§20</a>, <a href="4-sm.html#SP21">§21</a>, <a href="4-sm.html#SP24">§24</a>, <a href="4-sm.html#SP26">§26</a><br/>Pathnames - <a href="3-pth.html#SP7">§7</a><br/>Filenames - <a href="3-fln.html#SP5">§5</a><br/>Preprocessor - <a href="4-prp.html#SP4">§4</a><br/>Tries and Avinues - <a href="4-taa.html#SP2">§2</a><br/>Pattern Matching - <a href="4-pm.html#SP3">§3</a>, <a href="4-pm.html#SP4">§4</a>, <a href="4-pm.html#SP11">§11</a>, <a href="4-pm.html#SP11_4">§11.4</a>, <a href="4-pm.html#SP11_6">§11.6</a>, <a href="4-pm.html#SP14">§14</a>, <a href="4-pm.html#SP14_1">§14.1</a><br/>JSON - <a href="4-jsn.html#SP10">§10</a>, <a href="4-jsn.html#SP11_1">§11.1</a>, <a href="4-jsn.html#SP12">§12</a>, <a href="4-jsn.html#SP13">§13</a>, <a href="4-jsn.html#SP14">§14</a>, <a href="4-jsn.html#SP15">§15</a>, <a href="4-jsn.html#SP16">§16</a>, <a href="4-jsn.html#SP16_1">§16.1</a>, <a href="4-jsn.html#SP32">§32</a>, <a href="4-jsn.html#SP32_1">§32.1</a>, <a href="4-jsn.html#SP32_2">§32.2</a>, <a href="4-jsn.html#SP33">§33</a>, <a href="4-jsn.html#SP34">§34</a><br/>Web Structure - <a href="8-ws.html#SP5_4_1_1">§5.4.1.1</a>, <a href="8-ws.html#SP7">§7</a><br/>Build Files - <a href="8-bf.html#SP9">§9</a><br/>Simple Tangler - <a href="8-st.html#SP7_2_1">§7.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">index</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="function-syntax">Str::get_at</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Str::get_at</span></span>:<br/><a href="4-sm.html#SP20">§20</a>, <a href="4-sm.html#SP21">§21</a>, <a href="4-sm.html#SP24">§24</a>, <a href="4-sm.html#SP26">§26</a><br/>Pathnames - <a href="3-pth.html#SP7">§7</a><br/>Filenames - <a href="3-fln.html#SP5">§5</a><br/>Preprocessor - <a href="4-prp.html#SP1">§1</a>, <a href="4-prp.html#SP3_2">§3.2</a>, <a href="4-prp.html#SP4">§4</a><br/>Tries and Avinues - <a href="4-taa.html#SP2">§2</a><br/>Pattern Matching - <a href="4-pm.html#SP3">§3</a>, <a href="4-pm.html#SP4">§4</a>, <a href="4-pm.html#SP11">§11</a>, <a href="4-pm.html#SP11_4">§11.4</a>, <a href="4-pm.html#SP11_6">§11.6</a>, <a href="4-pm.html#SP14">§14</a>, <a href="4-pm.html#SP14_1">§14.1</a><br/>JSON - <a href="4-jsn.html#SP10">§10</a>, <a href="4-jsn.html#SP11_1">§11.1</a>, <a href="4-jsn.html#SP12">§12</a>, <a href="4-jsn.html#SP13">§13</a>, <a href="4-jsn.html#SP14">§14</a>, <a href="4-jsn.html#SP15">§15</a>, <a href="4-jsn.html#SP16">§16</a>, <a href="4-jsn.html#SP16_1">§16.1</a>, <a href="4-jsn.html#SP32">§32</a>, <a href="4-jsn.html#SP32_1">§32.1</a>, <a href="4-jsn.html#SP32_2">§32.2</a>, <a href="4-jsn.html#SP33">§33</a>, <a href="4-jsn.html#SP34">§34</a><br/>Web Structure - <a href="8-ws.html#SP5_4_1_1">§5.4.1.1</a>, <a href="8-ws.html#SP7">§7</a><br/>Build Files - <a href="8-bf.html#SP9">§9</a><br/>Simple Tangler - <a href="8-st.html#SP7_2_1">§7.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">index</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">S</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">index</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-str.html#SP40" class="function-link"><span class="function-syntax">Streams::get_char_at_index</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">index</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -312,7 +312,7 @@ at those positions may well not be, of course.)
|
|||
<span class="plain-syntax"> </span><a href="2-str.html#SP40" class="function-link"><span class="function-syntax">Streams::put_char_at_index</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">.</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">.</span><span class="element-syntax">index</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Str::put_at</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">Str::put_at</span></span>:<br/>Text Files - <a href="4-tf.html#SP5_3">§5.3</a>, <a href="4-tf.html#SP6">§6</a><br/>Web Structure - <a href="8-ws.html#SP5_4_1_1">§5.4.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">index</span><span class="plain-syntax">, </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Str::put_at</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">Str::put_at</span></span>:<br/>Text Files - <a href="4-tf.html#SP5_3">§5.3</a>, <a href="4-tf.html#SP6">§6</a><br/>Preprocessor - <a href="4-prp.html#SP3_2">§3.2</a><br/>Web Structure - <a href="8-ws.html#SP5_4_1_1">§5.4.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">index</span><span class="plain-syntax">, </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="4-sm.html#SP14" class="function-link"><span class="function-syntax">Str::put</span></a><span class="plain-syntax">(</span><a href="4-sm.html#SP10" class="function-link"><span class="function-syntax">Str::at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">index</span><span class="plain-syntax">), </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
|
|
@ -719,38 +719,14 @@ can be removed. None of that removal happens here; we're just the bookkeeper.
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">HTML::open_coloured_box</span><span class="plain-syntax">(</span><span class="constant-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">classname</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rounding</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"table"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"width=\"100%%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"width=\"100%%\" cellpadding=\"6\" cellspacing=\"0\" border=\"0\" "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"class=\"%S\""</span><span class="plain-syntax">, </span><span class="identifier-syntax">classname</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"tr"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">, </span><span class="string-syntax">"width=\"%d\""</span><span class="plain-syntax">, </span><span class="constant-syntax">CORNER_SIZE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rounding</span><span class="plain-syntax"> & </span><span class="constant-syntax">ROUND_BOX_TOP</span><span class="plain-syntax">) </span><a href="5-htm.html#SP21" class="function-link"><span class="function-syntax">HTML::box_corner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">classname</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"tl"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">, </span><span class="string-syntax">"width=\"%d\""</span><span class="plain-syntax">, </span><span class="constant-syntax">CORNER_SIZE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rounding</span><span class="plain-syntax"> & </span><span class="constant-syntax">ROUND_BOX_TOP</span><span class="plain-syntax">) </span><a href="5-htm.html#SP21" class="function-link"><span class="function-syntax">HTML::box_corner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">classname</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"tr"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"tr"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"tr"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">, </span><span class="string-syntax">"width=\"%d\""</span><span class="plain-syntax">, </span><span class="constant-syntax">CORNER_SIZE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">HTML::close_coloured_box</span><span class="plain-syntax">(</span><span class="constant-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">classname</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rounding</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">, </span><span class="string-syntax">"width=\"%d\""</span><span class="plain-syntax">, </span><span class="constant-syntax">CORNER_SIZE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"tr"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"tr"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">, </span><span class="string-syntax">"width=\"%d\""</span><span class="plain-syntax">, </span><span class="constant-syntax">CORNER_SIZE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rounding</span><span class="plain-syntax"> & </span><span class="constant-syntax">ROUND_BOX_BOTTOM</span><span class="plain-syntax">) </span><a href="5-htm.html#SP21" class="function-link"><span class="function-syntax">HTML::box_corner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">classname</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"bl"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">, </span><span class="string-syntax">"width=\"%d\""</span><span class="plain-syntax">, </span><span class="constant-syntax">CORNER_SIZE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rounding</span><span class="plain-syntax"> & </span><span class="constant-syntax">ROUND_BOX_BOTTOM</span><span class="plain-syntax">) </span><a href="5-htm.html#SP21" class="function-link"><span class="function-syntax">HTML::box_corner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">classname</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"br"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"td"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"tr"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-htm.html#SP20" class="function-link"><span class="function-syntax">HTML::end_html_table</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
|
Binary file not shown.
|
@ -61,7 +61,7 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">header</span><span class="plain-syntax">, </span><span class="string-syntax">"# This gitignore was automatically written by inweb -gitignore\n"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">header</span><span class="plain-syntax">, </span><span class="string-syntax">"# and is not intended for human editing\n\n"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="constant-syntax">STDOUT</span><span class="plain-syntax">, </span><span class="string-syntax">"(Read script from %f)\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">prototype</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="../foundation-module/4-prp.html#SP1" class="function-link"><span class="function-syntax">Preprocessor::preprocess</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prototype</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">header</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="constant-syntax">NULL_GENERAL_POINTER</span><span class="plain-syntax">, </span><span class="character-syntax">'#'</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="../foundation-module/4-prp.html#SP1" class="function-link"><span class="function-syntax">Preprocessor::preprocess</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prototype</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">header</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="constant-syntax">NULL_GENERAL_POINTER</span><span class="plain-syntax">, </span><span class="character-syntax">'#'</span><span class="plain-syntax">, </span><span class="constant-syntax">ISO_ENC</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Our one non-standard macro simply includes a file of standing material which
|
||||
|
|
|
@ -92,7 +92,7 @@ special loop construct.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="constant-syntax">STDOUT</span><span class="plain-syntax">, </span><span class="string-syntax">"(Read script from %f)\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">prototype</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><a href="../foundation-module/4-prp.html#SP1" class="function-link"><span class="function-syntax">Preprocessor::preprocess</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prototype</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">header</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">STORE_POINTER_makefile_specifics</span><span class="plain-syntax">(</span><span class="identifier-syntax">specifics</span><span class="plain-syntax">), </span><span class="character-syntax">'#'</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">STORE_POINTER_makefile_specifics</span><span class="plain-syntax">(</span><span class="identifier-syntax">specifics</span><span class="plain-syntax">), </span><span class="character-syntax">'#'</span><span class="plain-syntax">, </span><span class="constant-syntax">ISO_ENC</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP1_1" class="paragraph-anchor"></a><b>§1.1. </b>We will allow a makescript to declare "components" (webs, really), so we need
|
||||
|
|
|
@ -63,7 +63,7 @@ colliding with Markdown's heading syntax.
|
|||
<span class="plain-syntax"> </span><a href="6-rw.html#SP2" class="function-link"><span class="function-syntax">Readme::bibliographic_expander</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="../foundation-module/4-prp.html#SP13" class="function-link"><span class="function-syntax">Preprocessor::do_not_suppress_whitespace</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mm</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="constant-syntax">STDOUT</span><span class="plain-syntax">, </span><span class="string-syntax">"(Read script from %f)\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">prototype</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="../foundation-module/4-prp.html#SP1" class="function-link"><span class="function-syntax">Preprocessor::preprocess</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prototype</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="constant-syntax">NULL_GENERAL_POINTER</span><span class="plain-syntax">, </span><span class="character-syntax">'/'</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="../foundation-module/4-prp.html#SP1" class="function-link"><span class="function-syntax">Preprocessor::preprocess</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prototype</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="constant-syntax">NULL_GENERAL_POINTER</span><span class="plain-syntax">, </span><span class="character-syntax">'/'</span><span class="plain-syntax">, </span><span class="constant-syntax">ISO_ENC</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>And this is the one domain-specific macro:
|
||||
|
|
|
@ -638,6 +638,10 @@ elaborate makefiles for multi-web projects.
|
|||
<ul class="items"><li>● Comment lines, those beginning with <span class="extract"><span class="extract-syntax">#</span></span>, are stripped out.
|
||||
</li><li>● Material in balanced braces <span class="extract"><span class="extract-syntax">{ ... }</span></span> is expanded into something more
|
||||
interesting.
|
||||
</li><li>● Literal braces can be written with a backslash, <span class="extract"><span class="extract-syntax">\{</span></span> and <span class="extract"><span class="extract-syntax">\}</span></span>, which
|
||||
expand just into <span class="extract"><span class="extract-syntax">{</span></span> and <span class="extract"><span class="extract-syntax">}</span></span>. Literal backslashes are written <span class="extract"><span class="extract-syntax">\\</span></span>, which
|
||||
"expands" to <span class="extract"><span class="extract-syntax">\</span></span>. A backslash is not allowed to precede any other character,
|
||||
so something like <span class="extract"><span class="extract-syntax">\fish</span></span> produces an error message.
|
||||
</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>§20. </b>Makescripts support variables, whose names have to be in capital letters,
|
||||
perhaps with underscores and digits added. For example:
|
||||
|
|
|
@ -318,7 +318,8 @@ JSON_value *JSON::decode_array(JSON_value *array, text_stream *T, int from, int
|
|||
switch (c) {
|
||||
case '"': quoted = (quoted)?FALSE:TRUE; break;
|
||||
case '\\': if (quoted) i++; break;
|
||||
case ',': if ((first_comma < 0) && (bl == 0)) first_comma = i; break;
|
||||
case ',': if ((quoted == FALSE) && ((first_comma < 0) && (bl == 0)))
|
||||
first_comma = i; break;
|
||||
case '[': case '{': if (quoted == FALSE) bl++; break;
|
||||
case ']': case '}': if (quoted == FALSE) bl--; break;
|
||||
}
|
||||
|
@ -354,7 +355,8 @@ JSON_value *JSON::decode_object(JSON_value *obj, text_stream *T, int from, int t
|
|||
switch (c) {
|
||||
case '"': quoted = (quoted)?FALSE:TRUE; break;
|
||||
case '\\': if (quoted) i++; break;
|
||||
case ',': if ((first_comma < 0) && (bl == 0)) first_comma = i; break;
|
||||
case ',': if ((quoted == FALSE) && ((first_comma < 0) && (bl == 0)))
|
||||
first_comma = i; break;
|
||||
case '[': case '{': if (quoted == FALSE) bl++; break;
|
||||
case ']': case '}': if (quoted == FALSE) bl--; break;
|
||||
}
|
||||
|
@ -1141,7 +1143,8 @@ JSON_single_requirement *JSON::decode_req_array(JSON_single_requirement *array_s
|
|||
switch (c) {
|
||||
case '"': quoted = (quoted)?FALSE:TRUE; break;
|
||||
case '\\': if (quoted) i++; break;
|
||||
case ',': if ((first_comma < 0) && (bl == 0)) first_comma = i; break;
|
||||
case ',': if ((quoted == FALSE) && ((first_comma < 0) && (bl == 0)))
|
||||
first_comma = i; break;
|
||||
case '[': case '{': case '(': if (quoted == FALSE) bl++; break;
|
||||
case ']': case '}': case ')': if (quoted == FALSE) bl--; break;
|
||||
}
|
||||
|
@ -1178,7 +1181,8 @@ JSON_single_requirement *JSON::decode_req_object(JSON_single_requirement *obj,
|
|||
switch (c) {
|
||||
case '"': quoted = (quoted)?FALSE:TRUE; break;
|
||||
case '\\': if (quoted) i++; break;
|
||||
case ',': if ((first_comma < 0) && (bl == 0)) first_comma = i; break;
|
||||
case ',': if ((quoted == FALSE) && ((first_comma < 0) && (bl == 0)))
|
||||
first_comma = i; break;
|
||||
case '[': case '{': case '(': if (quoted == FALSE) bl++; break;
|
||||
case ']': case '}': case ')': if (quoted == FALSE) bl--; break;
|
||||
}
|
||||
|
|
|
@ -12,18 +12,24 @@ For documentation on the markup notation, see //inweb: Webs, Tangling and Weavin
|
|||
|
||||
To use the preprocessor, call:
|
||||
= (text as InC)
|
||||
Preprocessor::preprocess(from, to, header, special_macros, specifics)
|
||||
Preprocessor::preprocess(from, to, header, special_macros, specifics, encoding)
|
||||
=
|
||||
where |from| and |to| are filenames, |header| is text to place at the top of
|
||||
the file (if any), |special_macros| is a |linked_list| of |preprocessor_macro|s
|
||||
set up with special meanings to the situation, and |specifics| is a general
|
||||
pointer to any data those special meanings need to use.
|
||||
pointer to any data those special meanings need to use. |encoding| should be
|
||||
one of |UTF8_ENC| or |ISO_ENC|.
|
||||
|
||||
@d PROTECTED_OPEN_BRACE_PPCHAR 0x25A0
|
||||
@d PROTECTED_CLOSE_BRACE_PPCHAR 0x25A1
|
||||
@d PROTECTED_BLANK_PPCHAR 0x25A2
|
||||
|
||||
=
|
||||
void Preprocessor::preprocess(filename *prototype, filename *F, text_stream *header,
|
||||
linked_list *special_macros, general_pointer specifics, wchar_t comment_char) {
|
||||
linked_list *special_macros, general_pointer specifics, wchar_t comment_char,
|
||||
int encoding) {
|
||||
struct text_stream processed_file;
|
||||
if (STREAM_OPEN_TO_FILE(&processed_file, F, ISO_ENC) == FALSE)
|
||||
if (STREAM_OPEN_TO_FILE(&processed_file, F, encoding) == FALSE)
|
||||
Errors::fatal_with_file("unable to write tangled file", F);
|
||||
text_stream *OUT = &processed_file;
|
||||
WRITE("%S", header);
|
||||
|
@ -32,6 +38,12 @@ void Preprocessor::preprocess(filename *prototype, filename *F, text_stream *hea
|
|||
@<Initialise the preprocessor state@>;
|
||||
TextFiles::read(prototype, FALSE, "can't open prototype file",
|
||||
TRUE, Preprocessor::scan_line, NULL, &PPS);
|
||||
for (int i=0; i<Str::len(PPS.dest); i++) {
|
||||
wchar_t c = Str::get_at(PPS.dest, i);
|
||||
if (c == PROTECTED_OPEN_BRACE_PPCHAR) PUT('{');
|
||||
else if (c == PROTECTED_CLOSE_BRACE_PPCHAR) PUT('}');
|
||||
else if (c != PROTECTED_BLANK_PPCHAR) PUT(c);
|
||||
}
|
||||
STREAM_CLOSE(OUT);
|
||||
}
|
||||
|
||||
|
@ -64,7 +76,7 @@ typedef struct preprocessor_loop {
|
|||
} preprocessor_loop;
|
||||
|
||||
@<Initialise the preprocessor state@> =
|
||||
PPS.dest = OUT;
|
||||
PPS.dest = Str::new();
|
||||
PPS.suppress_newline = FALSE;
|
||||
PPS.last_line_was_blank = TRUE;
|
||||
PPS.defining = NULL;
|
||||
|
@ -98,6 +110,7 @@ parametrised names: but then, nor should you.
|
|||
void Preprocessor::scan_line(text_stream *line, text_file_position *tfp, void *X) {
|
||||
preprocessor_state *PPS = (preprocessor_state *) X;
|
||||
@<Skip comments@>;
|
||||
@<Make backslash literals safe@>;
|
||||
@<Deal with textual definitions of new macros@>;
|
||||
Preprocessor::expand(line, tfp, PPS);
|
||||
@<Sometimes, but only sometimes, output a newline@>;
|
||||
|
@ -113,6 +126,30 @@ is the special comment character: often |#|, but not necessarily.
|
|||
if (Characters::is_whitespace(c) == FALSE) break;
|
||||
}
|
||||
|
||||
@<Make backslash literals safe@> =
|
||||
for (int i = 0; i < Str::len(line); i++) {
|
||||
wchar_t c = Str::get_at(line, i);
|
||||
if (c == '\\') {
|
||||
wchar_t d = Str::get_at(line, i+1);
|
||||
switch (d) {
|
||||
case '{':
|
||||
Str::put_at(line, i, PROTECTED_OPEN_BRACE_PPCHAR);
|
||||
Str::put_at(line, i+1, PROTECTED_BLANK_PPCHAR);
|
||||
break;
|
||||
case '}':
|
||||
Str::put_at(line, i, PROTECTED_CLOSE_BRACE_PPCHAR);
|
||||
Str::put_at(line, i+1, PROTECTED_BLANK_PPCHAR);
|
||||
break;
|
||||
case '\\':
|
||||
Str::put_at(line, i+1, PROTECTED_BLANK_PPCHAR);
|
||||
break;
|
||||
default:
|
||||
Errors::in_text_file("backslash '\\' must be followed by '{', '}' or '\\'", tfp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@<Deal with textual definitions of new macros@> =
|
||||
match_results mr = Regexp::create_mr();
|
||||
if (Regexp::match(&mr, line, L" *{define: *(%C+) *} *")) @<Begin a bare definition@>;
|
||||
|
@ -173,7 +210,7 @@ is the special comment character: often |#|, but not necessarily.
|
|||
(ii) Contains braces |{ ... }| used in nested pairs (unless there is a syntax
|
||||
error in the prototype, in which case we must complain).
|
||||
|
||||
The idea is the pass everything straight through except any braced matter,
|
||||
The idea is to pass everything straight through except any braced matter,
|
||||
which needs special attention.
|
||||
|
||||
=
|
||||
|
|
Loading…
Reference in a new issue